home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / powergui / sample / sample.bas < prev   
BASIC Source File  |  1995-03-30  |  67KB  |  1,663 lines

  1. 10 '
  2. 20 ' Power GUI system
  3. 30 '
  4. 40 '  [ C” 4th edition β version ] サンプルプログラム
  5. 50 '
  6. 60 ' 要:RAM4M以上
  7. 70 '
  8. 80 '                                      Programmed by Hirotaka Matsuoka
  9. 90 '                                      for F-BASIC 386 V2.1 L10
  10. 100 '
  11. 110 CLEAR ,,4096 , 1600000 ,, 50000
  12. 120 SCREEN @0 : COLOR 7,7 : VIEW : WINDOW : CLS
  13. 130 '
  14. 140 ' ファイルセレクタの色の指定方法
  15. 150 '     COLOR 7 ,(タイトルバー等の色),(文字・枠等の色)
  16. 160 '
  17. 170 ' (下のどの画面モードでも立ち上がるから、試してみようっ!)
  18. 180 '
  19. 190 SCREEN @0 : COLOR 7,%7,%8 : PALETTE 7,[200,200,200]  '  16 colors
  20. 200 'SCREEN @2 : COLOR 7,%218,%0                          '  256 colors
  21. 210 'SCREEN @1 : COLOR 7,[255,180,180],[16,16,16]         '  32768 colors
  22. 220 '
  23. 230 PGUI_MEMORY& = 700000
  24. 240 GOSUB *PGUI_INIT
  25. 250 GOSUB *WALL_PAPER
  26. 260 GOSUB *GUI_DATA_ENTRY
  27. 270 '
  28. 280 PGUI_NAME$ = "タイトル画面" : GOSUB *PGUI_WIN_OPEN
  29. 290 '
  30. 300 '  --<<  タイトル画面処理  >>--
  31. 310 *P001
  32. 320 GOSUB *PGUI_REFRESH
  33. 330 WHILE PGUI_RETURN$ <> "終了"
  34. 340   IF PGUI_RETURN$ = "未" THEN
  35. 350     PGUI_NAME$ = "未サポート告知" : GOSUB *PGUI_WIN_OPEN
  36. 360     WHILE PGUI_RETURN$ <> "確認" : GOSUB *PGUI : WEND
  37. 370     GOSUB *PGUI_WIN_CLOSE
  38. 380   ELSE
  39. 390   IF PGUI_RETURN$ = "file selector" THEN
  40. 400     FS_TITLE$ = "開発中です。誰かコンパイラをくれーっ。" : GOSUB *FILE_SELECTOR
  41. 410   ENDIF
  42. 420   IF PGUI_RETURN$ = "icon viewer" THEN GOSUB *ICON_VIEWER
  43. 430   ENDIF
  44. 440   GOSUB *PGUI
  45. 450 WEND
  46. 460 '
  47. 470 PGUI_NAME$ = "確認ウィンドウ" : GOSUB *PGUI_WIN_OPEN
  48. 480 GOSUB *PGUI_REFRESH : WHILE PGUI_RETURN$ = "" : GOSUB *PGUI : WEND
  49. 490 '
  50. 500 IF PGUI_RETURN$ = "取消" THEN GOSUB *PGUI_WIN_CLOSE : GOTO *P001
  51. 510 GOSUB *PGUI_WIN_CLOSE
  52. 520 END
  53. 530 '
  54. 540 *ICON_VIEWER
  55. 550  PGUI_NAME$ = "Icon list window"
  56. 560  GOSUB *PGUI_WIN_OPEN
  57. 570  GOSUB *PGUI_REFRESH : WHILE PGUI_RETURN$ <> "も ど る" : GOSUB *PGUI : WEND
  58. 580  '
  59. 590  '
  60. 600  GOSUB *PGUI_WIN_CLOSE
  61. 610  RETURN
  62. 620 '
  63. 630 *GUI_DATA_ENTRY
  64. 640 DIM PGUI_LIST_SCROLL%( FNG_BUF_DIM&( 400 , 400 , PGUI_BITS_PAR_SAMPLE , 2 ))
  65. 650 '
  66. 660 ' タイトル画面GUIデータ登録
  67. 670 '
  68. 680 PGUI_NAME$ = "タイトル画面" : PGUI_TYPE$ = "WINDOW"
  69. 690 PGUI_FORM$ = "T-OS" : PGUI_DISP$ = "C two prime programmer's support MAIN MENU"
  70. 700 PGUI_WX = 590 : PGUI_WY = 400
  71. 710 PGUI_POS$ = "中央"
  72. 720 PGUI_DATA& = 1
  73. 730 GOSUB *PGUI_ENTRY
  74. 740 '
  75. 750 GOSUB *PGUI_REFRESH
  76. 760 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "終了" : GOSUB *PGUI_ENTRY
  77. 770 '
  78. 780 PGUI_TYPE$ = "LETTER" : PGUI_SX = 60
  79. 790 PGUI_SY = 27 : PGUI_DISP$ = "POWER GUI SYSTEM C TWO PRIME 4TH EDITION" :GOSUB *PGUI_ENTRY
  80. 800 PGUI_SY = 52 : PGUI_DISP$ = "           PROGRAMMERS SUPPORT" :GOSUB *PGUI_ENTRY
  81. 810 '
  82. 820 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND"
  83. 830 PGUI_SX = 10 : PGUI_WX = 140 : PGUI_WY = 0 : WY = 10
  84. 840 PGUI_SY = 100 : PGUI_RETURN$ = "未" : PGUI_DISP$ = "行番号管理" : GOSUB *PGUI_ENTRY
  85. 850 PGUI_SY = 130 : PGUI_RETURN$ = "未" :PGUI_DISP$ = "アイコンデータ作成" : GOSUB *PGUI_ENTRY
  86. 860 PGUI_SY = 160 : PGUI_RETURN$ = "file selector" :PGUI_DISP$ = "ファイルセレクタβ版" : GOSUB *PGUI_ENTRY
  87. 870 PGUI_SY = 190 : PGUI_RETURN$ = "icon viewer" : PGUI_DISP$ = "利用可能アイコン一覧" : GOSUB *PGUI_ENTRY
  88. 880 '
  89. 890 PGUI_SY = 300 : PGUI_DISP$ = "終 了" : PGUI_RETURN$ = "終了" : GOSUB *PGUI_ENTRY
  90. 900 '
  91. 910 PGUI_FILE_NAME$ = "PGUI_SMN.DOC"
  92. 920 PGUI_LIST_BUF_SIZE& = 200 : PGUI_LIST_OFFSET& = PGUI_LIST_ENTRY&
  93. 930 GOSUB *PGUI_READ_TEXT
  94. 940 '
  95. 950 GOSUB *PGUI_REFRESH
  96. 960 PGUI_TYPE$ = "SCROLL LIST MENU" : PGUI_NAME$ = "説明"
  97. 970 PGUI_SX = 160 : PGUI_SY = 76
  98. 980 PGUI_WX = 400 : PGUI_DISP_WY = 22
  99. 990 PGUI_LIST_BUF_SIZE% = 200
  100. 1000 GOSUB *PGUI_ENTRY
  101. 1010 GOSUB *PGUI_REFRESH
  102. 1020 '
  103. 1030 ' アイコン一覧表ウィンドウGUIデータ登録
  104. 1040 '
  105. 1050 PGUI_NAME$ = "Icon list window" : PGUI_DISP$ = "アイコン管理"
  106. 1060 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "T-OS"
  107. 1070 PGUI_POS$ = "中央" : PGUI_WX = 350 : PGUI_WY = 300
  108. 1080 GOSUB *PGUI_ENTRY
  109. 1090 '
  110. 1100 GOSUB *PGUI_REFRESH
  111. 1110 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "3D" : PGUI_WX = 100 : PGUI_WY = 0 : PGUI_SY = 260
  112. 1120 PGUI_SX =  50 : PGUI_DISP$ = "も ど る" : GOSUB *PGUI_ENTRY
  113. 1130 PGUI_SX = 180 : PGUI_DISP$ = "アイコン番号" : GOSUB *PGUI_ENTRY
  114. 1140 GOSUB *PGUI_REFRESH
  115. 1150 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "も ど る" : GOSUB *PGUI_ENTRY
  116. 1160 '
  117. 1170 GOSUB *PGUI_REFRESH
  118. 1180 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 20
  119. 1190 PGUI_SY = 200 : PGUI_DISP$ = " 0から順に左から右、上から下の順でアイコン番号が" : GOSUB *PGUI_ENTRY
  120. 1200 PGUI_SY = 220 : PGUI_DISP$ = "付けられています。" : GOSUB *PGUI_ENTRY
  121. 1210 PGUI_SY = 240 : PGUI_DISP$ = " 各行の先頭のアイコン番号は10の倍数です。" : GOSUB *PGUI_ENTRY
  122. 1220 '
  123. 1230 '
  124. 1240 FOR Y = 0 TO 5
  125. 1250   PGUI_SY = 30 + Y * 40
  126. 1260   FOR X = 0 TO 9
  127. 1270     PGUI_SX = 20 + X * 30
  128. 1280     PGUI_DATA& = Y * 10 + X
  129. 1290     PGUI_TYPE$ = "ICON24"
  130. 1300     GOSUB *PGUI_ENTRY
  131. 1310   NEXT
  132. 1320 NEXT
  133. 1330 '
  134. 1340 '
  135. 1350 '
  136. 1360 '
  137. 1370 '
  138. 1380 '
  139. 1390 '
  140. 1400 '
  141. 1410 '
  142. 1420 '
  143. 1430 '
  144. 1440 ' 確認ウィンドウ用GUIデータ登録
  145. 1450 '
  146. 1460 GOSUB *PGUI_REFRESH
  147. 1470 PGUI_NAME$ = "確認ウィンドウ"
  148. 1480 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "SQUARE2"
  149. 1490 PGUI_WX = 295 : PGUI_WY = 73 : PGUI_POS$ = "中央"
  150. 1500 GOSUB *PGUI_ENTRY
  151. 1510 '
  152. 1520 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND" : PGUI_SY = 42 : PGUI_WX = 45 : PGUI_WY = 0
  153. 1530 PGUI_SX = 220 : PGUI_DISP$ = "取消" : GOSUB *PGUI_ENTRY
  154. 1540 PGUI_SX = 155 : PGUI_DISP$ = "実行" : GOSUB *PGUI_ENTRY
  155. 1550 '
  156. 1560 PGUI_TYPE$ = "ICON24" : PGUI_DATA& = 20 : PGUI_SX = 10 : PGUI_SY = 10 : GOSUB *PGUI_ENTRY
  157. 1570 '
  158. 1580 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 50
  159. 1590 PGUI_SY = 17 : PGUI_DISP$ = "C”プログラマーズサポートを終了します" : GOSUB *PGUI_ENTRY
  160. 1600 '
  161. 1610 ' 未サポート告知ウィンドウ用GUIデータ登録
  162. 1620 '
  163. 1630 GOSUB *PGUI_REFRESH
  164. 1640 PGUI_NAME$ = "未サポート告知"
  165. 1650 PGUI_TYPE$ = "WINDOW" : PGUI_FORM$ = "SQUARE2"
  166. 1660 PGUI_WX = 240 : PGUI_WY = 73 : PGUI_POS$ = "中央"
  167. 1670 GOSUB *PGUI_ENTRY
  168. 1680 '
  169. 1690 PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "ROUND" : PGUI_SY = 42 : PGUI_WX = 45 : PGUI_WY = 0
  170. 1700 PGUI_SX = 100 : PGUI_DISP$ = "確認" : GOSUB *PGUI_ENTRY
  171. 1710 '
  172. 1720 PGUI_TYPE$ = "ICON24" : PGUI_DATA& = 30 : PGUI_SX = 10 : PGUI_SY = 10 : GOSUB *PGUI_ENTRY
  173. 1730 '
  174. 1740 PGUI_TYPE$ = "LETTER" : PGUI_FORM$ = "SYSTEM12" : PGUI_SX = 60
  175. 1750 PGUI_SY = 17 : PGUI_DISP$ = "指定の機能は未サポートです" : GOSUB *PGUI_ENTRY
  176. 1760 RETURN
  177. 1770 '
  178. 1780 ' *WALL_PAPER
  179. 1790 '
  180. 1800 ' 壁紙を書きます( 1024×786 Dot 16M colors 以内の全ての画面モード用 )
  181. 1810 '
  182. 1820 *WALL_PAPER
  183. 1830  LINE(0,0)-(15,15),PRESET,,BF
  184. 1840  FOR I=0 TO 7
  185. 1850    LINE( 0 , 16 + I * 2 )-( 15 , 16 + I * 2 ),PRESET,,,&HAAAA
  186. 1860    LINE( 0 , 16 + I*2+1 )-( 15 , 16 + I*2+1 ),PRESET,,,&H5555
  187. 1870  NEXT
  188. 1880  FOR I=0 TO 7
  189. 1890    LINE( 15 , I * 2 )-( 31 , I * 2 ),PRESET,,,&HAAAA
  190. 1900    LINE( 15 , I*2+1 )-( 31 , I*2+1 ),PRESET,,,&H5555
  191. 1910  NEXT
  192. 1920  DIM WALL_PAPER%(80000)
  193. 1930  GET@A(0,0)-(31,31),WALL_PAPER%
  194. 1940  FOR Y = 0 TO 24 : PUT@A(0,Y*32)-(31,Y*32+31),WALL_PAPER% : NEXT
  195. 1950  GET@A(0,0)-(31,799),WALL_PAPER%
  196. 1960  FOR X = 0 TO 31 : PUT@A(X*32,0)-(X*32+31,799),WALL_PAPER% : NEXT
  197. 1970  ERASE WALL_PAPER%
  198. 1980  RETURN
  199. 1990 '
  200. 2000 ' *File_selector   / V1.0 L10 @10 #00
  201. 2010 '                     Programmed by Hirotaka Matsuoka
  202. 2020 '
  203. 2030 '  隠し機能を利用したGUIファイルセレクタ
  204. 2040 ' FS_FILE$ / EX$ / SIZE& に情報が返ります。
  205. 2050 '  FS_TITLE$ に題名が設定できます。
  206. 2060 '
  207. 2070 *FILE_SELECTOR
  208. 2080  FS_WILDCARD$ = "*.*"
  209. 2090  PGUI_MEMORY& = 450000
  210. 2100  GOSUB *PGUI_INIT
  211. 2110  '
  212. 2120  FS_TYPE = 0
  213. 2130  IF FS_TYPE$ = "" THEN
  214. 2140    DIM FS_I$(2) : FS_I$(0)="読" : FS_I$(1)="削除" : FS_I$(2)="ロード"
  215. 2150    FOR FS_I = 0 TO 2
  216. 2160      FS_DUMMY = KINSTR( FS_TITLE$ , FS_I$(FS_I))
  217. 2170      IF FS_DUMMY <> 0 THEN FS_TYPE = 1
  218. 2180    NEXT
  219. 2190    ERASE FS_I$
  220. 2200  ELSE
  221. 2210    IF FS_TYPE$="Read only" OR FS_TYPE$="READ ONLY" OR FS_TYPE$="read only" THEN FS_TYPE = 1
  222. 2220  ENDIF
  223. 2230  '
  224. 2240  IF FS_TITLE$ = "" THEN FS_TITLE$ = "ファイル名選択"
  225. 2250  '
  226. 2260  IF FS_EVER_CALLED = 0 THEN GOSUB *FS_INIT : FS_EVER_CALLED = -1
  227. 2270  '
  228. 2280  PGUI_NAME$ = "Power GUI file selector"
  229. 2290  GOSUB *PGUI_WIN_OPEN
  230. 2300  '
  231. 2310  IF FS_EVER_CALLED = 0 THEN DIM FS_GET_DRIVE( 25 ) : GOSUB *FS_GET_DRIVE
  232. 2320  '
  233. 2330  GOSUB *PGUI_REFRESH
  234. 2340  WHILE PGUI_RETURN$ <> "取 消"
  235. 2350    GOSUB *PGUI
  236. 2360  WEND
  237. 2370  GOSUB *PGUI_WIN_CLOSE
  238. 2380  RETURN
  239. 2390  '
  240. 2400  *FS_INIT
  241. 2410   ' ファイルセレクタ用GUIデータ登録
  242. 2420   '
  243. 2430   GOSUB *PGUI_REFRESH
  244. 2440   PGUI_TYPE$ = "WINDOW"
  245. 2450   PGUI_NAME$ = "Power GUI file selector"
  246. 2460   PGUI_FORM$ = "T-OS" : PGUI_POS$  = "中央"
  247. 2470   PGUI_DISP$ = FS_TITLE$
  248. 2480   PGUI_WX = 400 : PGUI_WY = 238
  249. 2490   GOSUB *PGUI_ENTRY : GOSUB *PGUI_REFRESH
  250. 2500   '
  251. 2510   PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "CLOSE" : PGUI_RETURN$ = "取 消"
  252. 2520   GOSUB *PGUI_ENTRY
  253. 2530   '
  254. 2540   PGUI_FORM$ = "ROUND"
  255. 2550   PGUI_DISP$ = "取 消"
  256. 2560   PGUI_SY = 202
  257. 2570   PGUI_SX = 328 : GOSUB *PGUI_ENTRY
  258. 2580   '
  259. 2590   PGUI_DISP$ = "実 行"
  260. 2600   PGUI_SX = 250 : GOSUB *PGUI_ENTRY
  261. 2610   '
  262. 2620   PGUI_FORM$ = "SQUARE"
  263. 2630   PGUI_DISP$ = "ディレクトリ移動"
  264. 2640   PGUI_SX = 244 : PGUI_SY = 26 : PGUI_WY = 15
  265. 2650   GOSUB *PGUI_ENTRY
  266. 2660   '
  267. 2670   PGUI_DISP$ = "SHOW ALL"
  268. 2680   PGUI_SX = 10 : PGUI_SY = 67 : PGUI_WX = 105 : PGUI_WY = 14
  269. 2690   GOSUB *PGUI_ENTRY
  270. 2700   '
  271. 2710   PGUI_DISP$ = "" : PGUI_RETURN$ = "Current directory indigator"
  272. 2720   PGUI_SX = 124 : PGUI_SY = 25 : PGUI_WX = 90 : PGUI_WY = 16
  273. 2730   GOSUB *PGUI_ENTRY
  274. 2740   '
  275. 2750   PGUI_SX = 366 : PGUI_WX = 16 : PGUI_WY = 17 : PGUI_RETURN$ = "UP" : GOSUB *PGUI_ENTRY
  276. 2760   '
  277. 2770   GOSUB *PGUI_REFRESH
  278. 2780   PGUI_LIST_OFFSET& = PGUI_LIST_ENTRY&
  279. 2790   GOSUB *FS_GET_FILE_LIST     ' PGUI_MAX_Y も自動的に設定される
  280. 2800   '
  281. 2810   PGUI_TYPE$ = "SCROLL LIST MENU" : PGUI_FORM$ = "MENU"
  282. 2820   PGUI_NAME$ = "file list"
  283. 2830   PGUI_SX = 124 : PGUI_SY = 43 : PGUI_WX = 240
  284. 2840   PGUI_DISP_WY = 10 : PGUI_LIST_BUF_SIZE& = 1024
  285. 2850   PGUI_START_Y = 0
  286. 2860   GOSUB *PGUI_ENTRY
  287. 2870   '
  288. 2880   PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "SQUARE" : PGUI_SY = 25
  289. 2890   PGUI_SX = 10 : PGUI_WX = 19 : PGUI_WY = 40 : PGUI_RETURN$ = "drive -1" : GOSUB *PGUI_ENTRY
  290. 2900   PGUI_SX = 96 : PGUI_RETURN$ = "drive +1" : GOSUB *PGUI_ENTRY
  291. 2910   PGUI_SX = 31 : PGUI_WX = 63 : PGUI_RETURN$ = "update" : GOSUB *PGUI_ENTRY
  292. 2920   '
  293. 2930   PGUI_TYPE$ = "ICON24"
  294. 2940   PGUI_NAME$ = "drive icon" : PGUI_SY = 32
  295. 2950   PGUI_DATA& = 0 : PGUI_SX = 55 : GOSUB *PGUI_ENTRY
  296. 2960   '
  297. 2970   PGUI_TYPE$ = "ICON12"
  298. 2980   PGUI_NAME$ = "drive name icon"
  299. 2990   PGUI_DATA& = 30 : PGUI_SX = 40 : GOSUB *PGUI_ENTRY
  300. 3000   PGUI_DATA& =  2 : PGUI_SX = 14 : PGUI_SY = 40 : GOSUB *PGUI_ENTRY
  301. 3010   PGUI_DATA& =  3 : PGUI_SX = 100 : GOSUB *PGUI_ENTRY
  302. 3020   PGUI_DATA& = 11 : PGUI_SX = 368 : PGUI_SY = 28 : GOSUB *PGUI_ENTRY
  303. 3030   '
  304. 3040   GOSUB *PGUI_REFRESH
  305. 3050   '
  306. 3060   RETURN
  307. 3070  '
  308. 3080  ' *FS_Get_file_list
  309. 3090  '
  310. 3100  '  ファイル・ディレクトリ名の取得と成型・ソーティングを行い、以下
  311. 3110  ' の変数に結果を返します。
  312. 3120  '
  313. 3130  '      FS_WILDCARD$        ワイルドカードを設定します。
  314. 3140  '     PGUI_LIST$(x)       成型されたファイル・ディレクトリ名リスト
  315. 3150  '      FS_CURRENT_DIR$     カレントディレクトリ名
  316. 3160  '      PGUI_MAX_Y          リストの総項目数
  317. 3170  '
  318. 3180  *FS_GET_FILE_LIST
  319. 3190   FILES FS_WILDCARD$ , C , FS_WORK& : FS_WORK_MAX& = FS_WORK&(1)
  320. 3200   DIM FS_MASTER$( FS_WORK_MAX& ) , FS_DIR$( FS_WORK_MAX& ) , FS_FILE$( FS_WORK_MAX& )
  321. 3210   FS_WORK_MAX& = FS_WORK_MAX& - 1
  322. 3220   '
  323. 3230   FILES FS_WILDCARD$ , N , FS_MASTER$
  324. 3240   '
  325. 3250   FS_CURRENT_DIR$ = FS_MASTER$(1)
  326. 3260   ' -- ファイルとディレクトリを分ける --
  327. 3270   PGUI_MAX_Y = 0 : FS_DIR_COUNTER& = 0 : FS_FILE_COUNTER& = 0
  328. 3280   FOR FS_I = 0 TO FS_WORK_MAX&
  329. 3290     FS_DUMMY$ = FS_MASTER$( FS_I + 1 )
  330. 3300     FS_DUMMY$ = " " + MID$( FS_DUMMY$,1,12 )+ MID$( FS_DUMMY$,16,12 )+MID$( FS_DUMMY$,31,2 )+ "-" + MID$( FS_DUMMY$,34,2 )+ "-" + MID$( FS_DUMMY$,37,8)
  331. 3310     IF MID$( FS_DUMMY$ , 18 , 3 ) = "DIR" THEN
  332. 3320       FS_WORK$ = LEFT$( FS_DUMMY$ , 3 )
  333. 3330       IF FS_WORK$ <> " . " THEN
  334. 3340         IF FS_WORK$ = " .." THEN
  335. 3350           MID$( FS_DUMMY$ , 1 ) = "<<親ディレクトリ >>                          "
  336. 3360           PGUI_LIST$( PGUI_LIST_OFFSET& ) = FS_DUMMY$
  337. 3370           FS_DIR_POINTER& = 1
  338. 3380         ELSE
  339. 3390           FS_DIR$( FS_DIR_COUNTER& ) = FS_DUMMY$
  340. 3400           FS_DIR_COUNTER& = FS_DIR_COUNTER& + 1
  341. 3410         ENDIF
  342. 3420       ENDIF
  343. 3430     ELSE
  344. 3440       FS_FILE$( FS_FILE_COUNTER& ) = FS_DUMMY$
  345. 3450       FS_FILE_COUNTER& = FS_FILE_COUNTER& + 1
  346. 3460     ENDIF
  347. 3470   NEXT
  348. 3480   FS_FILE_POINTER& = FS_DIR_POINTER& + FS_DIR_COUNTER&
  349. 3490   PGUI_MAX_Y = FS_FILE_POINTER& + FS_FILE_COUNTER&
  350. 3500   ' -- ディレクトリ名のソート --
  351. 3510   IF FS_DIR_COUNTER& <> 0 THEN
  352. 3520     FOR FS_I = FS_DIR_POINTER& TO FS_FILE_POINTER& - 1
  353. 3530       FS_DUMMY$ = FS_DIR$( FS_I - FS_DIR_POINTER& )
  354. 3540       MID$( FS_DUMMY$ ,  1 ) = "<"
  355. 3550       MID$( FS_DUMMY$ , 13 ) = ">            "
  356. 3560       PGUI_LIST$( FS_I + PGUI_LIST_OFFSET& ) = FS_DUMMY$
  357. 3570     NEXT
  358. 3580     FS_START = PGUI_LIST_OFFSET& + FS_DIR_POINTER& : FS_SIZE = FS_DIR_COUNTER&
  359. 3590     GOSUB *FS_SORT_WORK
  360. 3600   ENDIF
  361. 3610   ' -- ファイル名のソート --
  362. 3620   IF FS_FILE_COUNTER& <> 0 THEN
  363. 3630     FOR FS_I = FS_FILE_POINTER& TO PGUI_MAX_Y - 1
  364. 3640       PGUI_LIST$( FS_I + PGUI_LIST_OFFSET& ) = FS_FILE$( FS_I - FS_FILE_POINTER& )
  365. 3650     NEXT
  366. 3660     FS_START = PGUI_LIST_OFFSET& + FS_FILE_POINTER& : FS_SIZE = FS_FILE_COUNTER&
  367. 3670     GOSUB *FS_SORT_WORK
  368. 3680   ENDIF
  369. 3690   '
  370. 3700   ERASE FS_MASTER$ , FS_DIR$ , FS_FILE$
  371. 3710   RETURN
  372. 3720  '
  373. 3730  ' *FS_Sort_work
  374. 3740  '
  375. 3750  ' ソート中枢
  376. 3760  '  PGUI_LIST$(x) の FS_START 番目から FS_SIZE 個のデーターに対し
  377. 3770  ' てソーティングを行います。
  378. 3780  '
  379. 3790  *FS_SORT_WORK
  380. 3800   IF FS_SIZE < 2 THEN RETURN
  381. 3810   FOR FS_I = FS_START TO FS_START + FS_SIZE - 2
  382. 3820     FS_WORK$ = PGUI_LIST$( FS_I )
  383. 3830     FOR FS_J = FS_I + 1 TO FS_START + FS_SIZE - 1
  384. 3840       IF PGUI_LIST$( FS_J ) < FS_WORK$ THEN SWAP FS_WORK$ , PGUI_LIST$( FS_J )
  385. 3850     NEXT
  386. 3860     PGUI_LIST$( FS_I ) = FS_WORK$
  387. 3870   NEXT
  388. 3880   RETURN
  389. 3890  '
  390. 3900  ' *FS_get_drive
  391. 3910  '
  392. 3920  ' ドライブ構成情報を FS_GET_DRIVE( Drive NO' ) に返します。
  393. 3930  '
  394. 3940  *FS_GET_DRIVE
  395. 3950   ON ERROR GOTO *FS_GET_DRIVE_ERR
  396. 3960   FS_GET_DRIVE_FLAG = -1
  397. 3970   FOR FS_GET_DRIVE = 0 TO 25
  398. 3980     FS_DRIVE_EXIST = -1
  399. 3990     FS_GET_DRIVE_DUMMY = DSKF( FS_GET_DRIVE )
  400. 4000     IF FS_DRIVE_EXIST THEN
  401. 4010       FS_GET_DRIVE( FS_GET_DRIVE ) = &H100
  402. 4020     ELSE
  403. 4030       FS_GET_DRIVE( FS_GET_DRIVE ) = &HFF
  404. 4040     ENDIF
  405. 4050   NEXT
  406. 4060   FS_GET_DRIVE_FLAG = 0
  407. 4070   ON ERROR GOTO 0
  408. 4080   RETURN
  409. 4090  '
  410. 4100  *FS_GET_DRIVE_ERR
  411. 4110   IF FS_GET_DRIVE_FLAG THEN
  412. 4120     IF ERR=60 FS_DRIVE_EXIST=0
  413. 4130   ENDIF
  414. 4140   RESUME NEXT
  415. 4150 '
  416. 4160 '
  417. 4170 '  Power GUI system [ C" ( C two prime ) ]  v4.0 L10 @10 #00
  418. 4180 '                                        for F-BASIC 386
  419. 4190 '                                        Programmed by H.Matsuoka
  420. 4200 '
  421. 4210 ' F-BASIC 386 用のGUIシステムです。
  422. 4220 ' T-OS 準拠デザインのGUIアプリケーションに最適です。
  423. 4230 '
  424. 4240 ' 詳しくは別記説明書をご覧下さい。
  425. 4250 '
  426. 4260 ' *PGUI_init
  427. 4270 '
  428. 4280 ' Power GUI system [ C" ( C two prime ) ] を初期化します。
  429. 4290 '  以下のパラメータを与えてプログラムの最初の方で実行して下さい。
  430. 4300 ' なお、同一プログラム中で、本ルーチンを複数回実行した場合は、最初の
  431. 4310 ' 設定のみが有効です。
  432. 4320 '
  433. 4330 '  PGUI_MEMORY&   Power GUI が使える配列領域の大きさ(単位はバイト)
  434. 4340 '         (プログラムにもよるが 700KByte 程度は必要 )
  435. 4350 '         (実際には、この設定プラス 50KByte 位を消費する )
  436. 4360 '         省略時は未使用配列変数領域の半分が割り当てられる
  437. 4370 '
  438. 4380 ' < 返り値 >
  439. 4390 '
  440. 4400 '  PGUI_COLORS&          現在の画面モードの色数
  441. 4410 '  PGUI_BITS_PAR_SAMPLE  色数を Bits par sample で表現したもの
  442. 4420 '
  443. 4430 *PGUI_INIT
  444. 4440  IF PGUI_INIT_EVER_CALLED = -1 THEN RETURN
  445. 4450  PGUI_INIT_EVER_CALLED = -1
  446. 4460  '
  447. 4470  ' 統合型グラフィックバッファ算出関数定義
  448. 4480  DEF FNG_BUF_DIM&(X,Y,BIT,VAR)=-INT(INT(-X*BIT/(8-(BIT=4)*24))*(8-(BIT=4)*24)*Y/8)/VAR
  449. 4490  '
  450. 4500  ' フォント定義
  451. 4510  DEF FONT "システム   12ドット"
  452. 4520  PGUI_FONT_WX = 6
  453. 4530  PGUI_FONT_WY = 12
  454. 4540  PGUI_SYMBOL_M! = PGUI_FONT_WY / 16
  455. 4550  '
  456. 4560  ' 色数と Bits par sample の調査
  457. 4570  GET@A(0,0)-(7,0),PGUI_WORK_B&:PSET(0,0),7 : LINE(1,0)-(7,0),PSET,0
  458. 4580  GET@A(0,0)-(7,0),PGUI_WORK& : PUT@A(0,0)-(7,0),PGUI_WORK_B&
  459. 4590  PGUI_COLORS& = PGUI_WORK&( 0 ) + 1
  460. 4600  PGUI_BITS_PAR_SAMPLE = - INT( - LOG( PGUI_COLORS& ) / LOG( 2 ) )
  461. 4610  IF PGUI_COLORS& = 32768 THEN PGUI_BITS_PAR_SAMPLE = 16
  462. 4620  ERASE PGUI_WORK_B& , PGUI_WORK&
  463. 4630  '
  464. 4640  ' ディスプレイ解像度の算出
  465. 4650  PGUI_RESO_X_M1 = WINDOW(2) - WINDOW(0)
  466. 4660  PGUI_RESO_Y_M1 = WINDOW(3) - WINDOW(1)
  467. 4670  PGUI_RESO_X = PGUI_RESO_X_M1 + 1
  468. 4680  PGUI_RESO_Y = PGUI_RESO_Y_M1 + 1
  469. 4690  '
  470. 4700  ' ウィンドウ管理配列の確保
  471. 4710  DIM PGUI_WIN_OPEN_HISTORY(40)
  472. 4720  DIM PGUI_WIN_OFFSET&(40)
  473. 4730  '
  474. 4740  ' GUI部品が利用するテキストリスト領域の確保
  475. 4750  DIM PGUI_LIST$(5000)
  476. 4760  '
  477. 4770  ' マウスイベントデーター初期化
  478. 4780  PGUI_EVENT_DATA_SIZE = 8
  479. 4790  PGUI_MAX_EVENT_NO = 500
  480. 4800  PGUI_EV_ENTRY& = 0
  481. 4810  PGUI_EVENT_NO = 0
  482. 4820  DIM PGUI_EVENT_OFFSET&( 40 )             ' ウィンドウ毎のイベントデータ先頭位置
  483. 4830  DIM PGUI_EVENT&( PGUI_MAX_EVENT_NO * PGUI_EVENT_DATA_SIZE )
  484. 4840  '
  485. 4850  ' 資料:マウスイベントデーターのフォーマット
  486. 4860  '
  487. 4870  '  ウィンドウヘッダ部
  488. 4880  '  + 0  ウィンドウ内のイベント総数
  489. 4890  '
  490. 4900  ' マウスイベントデータ部
  491. 4910  '  + 0  SX (座標は全てウィンドウ内座標)
  492. 4920  '  + 1  SY
  493. 4930  '  + 2  EX
  494. 4940  '  + 3  EY
  495. 4950  '  + 4  イベント発生時の呼出し部品ウィンドウ内番号
  496. 4960  '  + 5  イベント発生時の部品への受渡しパラメータ
  497. 4970  '  + 6  ドラッグ種類(0:ドラッグしない 1:ドラッグ、リリース時に呼び出す 2:ドラッグ、ドラッグ中にも呼び出す)
  498. 4980  '  + 7  イベント確定タイミング(0:リリース時 1:インパクト時 2:プレス中ずっと)
  499. 4990  '
  500. 5000  ' 画面退避領域の算出・確保
  501. 5010  IF PGUI_MEMORY& = 0 THEN PGUI_MEMORY& = INT( FRE(3) / 2 )
  502. 5020  DIM PGUI_WIN_BUF%( INT( PGUI_MEMORY& / 2 ) )
  503. 5030  '
  504. 5040  ' 部品データーエントリ・運用ワーク変数確保
  505. 5050  DIM PGUI_HYBRID(50)         ' ハイブリッド部品のエントリー用
  506. 5060  PGUI_ENTRY_HYBRID = 0       ' ハイブリッドの世代数を記録する
  507. 5070  PGUI_WIN_HEADER_SIZE =  2   ' Window ヘッダサイズ
  508. 5080  PGUI_PARTS_DATA_SIZE = 25   ' 部品1つあたりのデータサイズ
  509. 5090  PGUI_CHAR_DATA_SIZE = 5     ' 部品1つあたりの文字領域の大きさ
  510. 5100  PGUI_PARTS_ENTRY& = 0       ' 部品データのスタックエントリーカウンタ
  511. 5110  PGUI_CHAR_ENTRY&  = 0       ' 部品データ用文字領域のスタックエントリーカウンタ
  512. 5120  PGUI_LIST_ENTRY&  = 0       ' テキストリスト領域のスタックエントリーカウンタ
  513. 5130  PGUI_WIN_ENTRY    = 0       ' 登録されているウィンドウの総数
  514. 5140  PGUI_PARTS_NO = 0           ' アクティブ部品のウィンドウ内部品番号
  515. 5150  PGUI_PARTS_OFFSET&= 0       ' アクティブ部品の部品データオフセット
  516. 5160  PGUI_CHAR_OFFSET& = 0       ' アクティブ部品用文字領域のオフセット
  517. 5170  PGUI_LIST_OFFSET& = 0       ' アクティブ部品用のテキストリストデータのオフセット
  518. 5180  PGUI_WIN_OPEN_HISTORY = 0   ' オープンされているウィンドウの総数
  519. 5190  PGUI_WIN_NO = 0             ' アクティブウィンドウのウィンドウ番号
  520. 5200  PGUI_WIN_OFFSET&  = 0       ' アクティブウィンドウのGUIデータオフセット
  521. 5210  PGUI_WIN_BUF_OFFSET& = 0    ' 画面退避領域の使用済バッファサイズ
  522. 5220  PGUI_LINK_PARTS_NO = - 1    ' イベント発生時の呼出し部品番号
  523. 5230  '
  524. 5240  ' 部品データ保持配列定義と各要素のオフセット設定
  525. 5250  DIM PGUI&(10000)             ' GUIデータ格納配列
  526. 5260  DIM PGUI$(2000)              ' 文字領域
  527. 5270  PGUI_OF_CHAR_OFFSET   = 0    ' 
  528. 5280  PGUI_OF_HIBRID_NO     = 1    ' ハイブリッド世代番号(常に1以上)
  529. 5290  PGUI_OF_MASTER_OFFSET = 2    ' ハイブリッドマスター部品オフセット
  530. 5300  PGUI_OF_LIST_OFFSET   = 3    ' リスト領域の先頭オフセット。チャイルドは常にマスターと共有
  531. 5310  PGUI_OF_LIST_BUF_SIZE = 4    ' リスト領域の大きさ(行数)。チャイルドは常にマスターと共有
  532. 5320  PGUI_OF_DISP_SX       = 5 : PGUI_OF_DISP_SY = 6
  533. 5330  PGUI_OF_LINE_SPACE    = 7
  534. 5340  PGUI_OF_LINK_PARTS_NO = 8    ' リンクする部品番号
  535. 5350  PGUI_OF_DATA          = 9
  536. 5360  PGUI_OF_SX      = 13 : PGUI_OF_SY      = 14
  537. 5370  PGUI_OF_WX      = 15 : PGUI_OF_WY      = 16
  538. 5380  PGUI_OF_START_X = 17 : PGUI_OF_START_Y = 18
  539. 5390  PGUI_OF_MAX_X   = 19 : PGUI_OF_MAX_Y   = 20
  540. 5400  PGUI_OF_MIN_X   = 21 : PGUI_OF_MIN_Y   = 22
  541. 5410  PGUI_OF_DISP_WX = 23 : PGUI_OF_DISP_WY = 24
  542. 5420  '
  543. 5430  ' ドローウィンドウ周り初期化
  544. 5440  DIM PGUI_DRAW_WIN%( 200 * 4 )
  545. 5450  PGUI_DRAW_WIN_NO = -1
  546. 5460  PGUI_DRAW_SX = 0           : PGUI_DRAW_SY = 0
  547. 5470  PGUI_DRAW_WX = PGUI_RESO_X : PGUI_DRAW_WY = PGUI_RESO_Y
  548. 5480  GOSUB *PGUI_DRAW_WIN_SET
  549. 5490  '
  550. 5500  ' 12/24ドットローカルアイコン初期化
  551. 5510  GOSUB *PGUI_ICON_INIT
  552. 5520  '
  553. 5530  ' マウス初期化・マウススピード設定
  554. 5540  MOUSE 0 : MOUSE 3 , 0 , INP(&H3B06) : MOUSE 3 , 1 , INP(&H3B06)
  555. 5550  MOUSE 1 , 120 , 100 , 1
  556. 5560  '
  557. 5570  GOSUB *PGUI_REFRESH
  558. 5580  RETURN
  559. 5590 '
  560. 5600 ' *PGUI_ICON_INIT
  561. 5610 '
  562. 5620 '  12/24ドットローカルアイコンを初期化します。
  563. 5630 '
  564. 5640 *PGUI_ICON_INIT
  565. 5650  DIM PGUI_ICON_WORK%( FNG_BUF_DIM&( 320 , 240 , 1 , 2 ))
  566. 5660  DIM PGUI_ICON_BUF%( FNG_BUF_DIM&( 300 , 400 , PGUI_BITS_PAR_SAMPLE , 2 ))
  567. 5670  GET@A( 0 , 0 )-( PGUI_RESO_X , PGUI_RESO_Y ),PGUI_WIN_BUF%
  568. 5680  PGUI_OFFSET& = 0
  569. 5690  '
  570. 5700  PGUI_WX = 24 : PGUI_WY = 24 : PGUI_X  = 10 : PGUI_Y  = 6
  571. 5710  LOAD@ "PGUI24.ICN",PGUI_ICON_WORK%
  572. 5720  PGUI_ICON24_OFFSET& = PGUI_OFFSET&
  573. 5730  GOSUB *PGUI_ICON_INIT_WORK
  574. 5740  PGUI_ICON24_BUF_SIZE& = PGUI_BUF_SIZE&
  575. 5750  '
  576. 5760  PGUI_WX = 12 : PGUI_WY = 12 : PGUI_X  = 10 : PGUI_Y  = 12
  577. 5770  LOAD@ "PGUI12.ICN",PGUI_ICON_WORK%
  578. 5780  PGUI_ICON12_OFFSET& = PGUI_OFFSET&
  579. 5790  GOSUB *PGUI_ICON_INIT_WORK
  580. 5800  PGUI_ICON12_BUF_SIZE& = PGUI_BUF_SIZE&
  581. 5810  '
  582. 5820  PUT@A( 0 , 0 )-( PGUI_RESO_X , PGUI_RESO_Y ),PGUI_WIN_BUF%
  583. 5830  ERASE PGUI_ICON_WORK%
  584. 5840  RETURN
  585. 5850  '
  586. 5860  *PGUI_ICON_INIT_WORK
  587. 5870  PGUI_BUF_SIZE& = FNG_BUF_DIM&( PGUI_WX , PGUI_WY , PGUI_BITS_PAR_SAMPLE , 2 )
  588. 5880  LINE(0,0)-( PGUI_WX * PGUI_X - 1 , PGUI_WY * PGUI_Y - 1 ),PSET,7,BF
  589. 5890  PUT@(0,0)-( PGUI_WX * PGUI_X - 1 , PGUI_WY * PGUI_Y - 1 ),PGUI_ICON_WORK%,PSET
  590. 5900  FOR PGUI_Y = 0 TO PGUI_Y - 1
  591. 5910    PGUI_SY = PGUI_Y * PGUI_WY : PGUI_EY = PGUI_SY + PGUI_WY - 1
  592. 5920    FOR PGUI_X = 0 TO PGUI_X - 1
  593. 5930      PGUI_SX = PGUI_X * PGUI_WX
  594. 5940      GET@A( PGUI_SX , PGUI_SY )-( PGUI_SX + PGUI_WX -1 , PGUI_EY ),PGUI_ICON_BUF%,PGUI_OFFSET&
  595. 5950      PGUI_OFFSET& = PGUI_OFFSET& + PGUI_BUF_SIZE&
  596. 5960    NEXT
  597. 5970  NEXT
  598. 5980  RETURN
  599. 5990 '
  600. 6000 ' *PGUI
  601. 6010 '
  602. 6020 ' マウスの動作とウィンドウや部品の関係を統括します。
  603. 6030 '  本ルーチンを連続して呼び出す事で、システムが動作します。
  604. 6040 '
  605. 6050 *PGUI
  606. 6060  GOSUB *PGUI_MOUSE
  607. 6070  PGUI_SYS$ = ""
  608. 6080  RETURN
  609. 6090 '
  610. 6100 *PGUI_MOUSE                         ' マウスインパクトのチェックからイベント確定までの処理
  611. 6110  PGUI_OCCER_EVENT = 0
  612. 6120  IF MOUSE( 3 , 0 ) = 0 THEN RETURN
  613. 6130  GOSUB *PGUI_GET_MOUSE_POS          ' マウスの座標を取得
  614. 6140  PGUI_DUMMY = MOUSE( 9 )
  615. 6150  PGUI_DUMMY = MOUSE( 10 )
  616. 6160  GOSUB *PGUI_CHECK_MOUSE_EVENT      ' マウスイベントとの当たり判定チェック
  617. 6170  IF PGUI_CRASH THEN
  618. 6180 '
  619. 6190    PGUI_SYS$   = "EVENT" : PGUI_MOUSE$ = "INPACT"
  620. 6200    GOSUB *PGUI_EVENT_ACTIVE
  621. 6210    GOSUB *PGUI_PARTS_ACTIVE
  622. 6220    PGUI_ON = -1
  623. 6230    LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF
  624. 6240    'gosub *pgui_parts_access
  625. 6250 '
  626. 6260    PGUI_RELEASE_FLAG = MOUSE( 6 , 0 )
  627. 6270    WHILE PGUI_RELEASE_FLAG = 0 AND PGUI_OCCER_EVENT = 0
  628. 6280      GOSUB *PGUI_DRAG
  629. 6290      PGUI_RELEASE_FLAG = MOUSE( 6 , 0 )
  630. 6300    WEND
  631. 6310 '
  632. 6320    IF PGUI_ON THEN
  633. 6330      LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF
  634. 6340    ELSE
  635. 6350      GOSUB *PGUI_REFRESH
  636. 6360    ENDIF
  637. 6370    PGUI_ON = 0
  638. 6380 '
  639. 6390    IF PGUI_RETURN$ = "上に1つスクロール" THEN
  640. 6400      PGUI_PARTS_NO = PGUI_DATA& : GOSUB *PGUI_PARTS_ACTIVE
  641. 6410      PGUI_DIRECTION_Y = 1
  642. 6420      GOSUB *PGUI_LIST_SCROLL : GOSUB *PGUI_REFRESH
  643. 6430    ELSE
  644. 6440    IF PGUI_RETURN$ = "下に1つスクロール" THEN
  645. 6450      PGUI_PARTS_NO = PGUI_DATA& : GOSUB *PGUI_PARTS_ACTIVE
  646. 6460      PGUI_DIRECTION_Y = -1
  647. 6470      GOSUB *PGUI_LIST_SCROLL : GOSUB *PGUI_REFRESH
  648. 6480    ENDIF
  649. 6490    ENDIF
  650. 6500  ENDIF
  651. 6510  RETURN
  652. 6520 '
  653. 6530 *PGUI_DRAG    ' *pgui のドラッグルーチン部
  654. 6540  PGUI_MOUSE_DX = MOUSE( 9 )
  655. 6550  PGUI_MOUSE_DY = MOUSE( 10 )
  656. 6560 '
  657. 6570  IF PGUI_MOUSE_DX OR PGUI_MOUSE_DY THEN
  658. 6580 '
  659. 6590   PGUI_MOUSE_X = PGUI_MOUSE_X + PGUI_MOUSE_DX
  660. 6600   PGUI_MOUSE_Y = PGUI_MOUSE_Y + PGUI_MOUSE_DY
  661. 6610   PGUI_MOUSE_WX = PGUI_MOUSE_X - PGUI_WIN_SX
  662. 6620   PGUI_MOUSE_WY = PGUI_MOUSE_Y - PGUI_WIN_SY
  663. 6630 '
  664. 6640   IF PGUI_DRAG THEN
  665. 6650     '
  666. 6660   ELSE
  667. 6670 '
  668. 6680     PGUI_EVENT_B_NO = PGUI_EVENT_NO
  669. 6690     GOSUB *PGUI_CHECK_MOUSE_EVENT
  670. 6700     IF PGUI_CRASH AND PGUI_PARTS_NO = PGUI_EVENT&( PGUI_OFFSET& + 4 ) THEN
  671. 6710 '
  672. 6720       IF PGUI_EVENT_NO <> PGUI_EVENT_B_NO THEN
  673. 6730 '
  674. 6740         IF PGUI_ON THEN
  675. 6750 '
  676. 6760           PGUI_SYS$ = "RELEASE"
  677. 6770           LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF
  678. 6780           'GOSUB *PGUI_PARTS_ACCESS
  679. 6790           PGUI_ON = 0
  680. 6800 '
  681. 6810         ENDIF
  682. 6820 '
  683. 6830         GOSUB *PGUI_EVENT_ACTIVE
  684. 6840         PGUI_ME_X = PGUI_MOUSE_WX - PGUI_EVSX
  685. 6850         PGUI_ME_Y = PGUI_MOUSE_WY - PGUI_EVSY
  686. 6860         PGUI_SYS$ = "INPACT"
  687. 6870         LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF
  688. 6880         'GOSUB *PGUI_PARTS_ACCESS
  689. 6890         PGUI_ON = -1
  690. 6900 '
  691. 6910       ENDIF
  692. 6920 '
  693. 6930     ELSE
  694. 6940 '
  695. 6950       IF PGUI_ON THEN
  696. 6960 '
  697. 6970         LINE( PGUI_EVSX , PGUI_EVSY )-( PGUI_EVEX , PGUI_EVEY ),XOR,7,BF
  698. 6980         PGUI_ON = 0
  699. 6990 '
  700. 7000       ENDIF
  701. 7010     ENDIF
  702. 7020   ENDIF
  703. 7030  ENDIF
  704. 7040  RETURN
  705. 7050 '
  706. 7060 *PGUI_GET_MOUSE_POS
  707. 7070  PGUI_MOUSE_X = MOUSE( 4 , 0 )                  ' マウスのVRAM座標
  708. 7080  PGUI_MOUSE_Y = MOUSE( 5 , 0 )
  709. 7090  PGUI_MOUSE_WX = PGUI_MOUSE_X - PGUI_WIN_SX     ' マウスのウィンドウ内座標
  710. 7100  PGUI_MOUSE_WY = PGUI_MOUSE_Y - PGUI_WIN_SY
  711. 7110  RETURN
  712. 7120 '
  713. 7130 *PGUI_EVENT_ACTIVE
  714. 7140  PGUI_EVSX = PGUI_EVENT&( PGUI_OFFSET& )     : PGUI_EVSY = PGUI_EVENT&( PGUI_OFFSET& + 1 )
  715. 7150  PGUI_EVEX = PGUI_EVENT&( PGUI_OFFSET& + 2 ) : PGUI_EVEY = PGUI_EVENT&( PGUI_OFFSET& + 3 )
  716. 7160  PGUI_EVWX = PGUI_EVEX - PGUI_SX + 1         : PGUI_EVWY = PGUI_EVEY - PGUI_SY + 1
  717. 7170  PGUI_PARTS_NO = PGUI_EVENT&( PGUI_OFFSET& + 4 )
  718. 7180  PGUI_CALL_PRA& = PGUI_EVENT&( PGUI_OFFSET& + 5 )
  719. 7190  PGUI_DRAG = PGUI_EVENT&( PGUI_OFFSET& + 6 )
  720. 7200  RETURN
  721. 7210 '
  722. 7220 *PGUI_CHECK_MOUSE_EVENT
  723. 7230  PGUI_EVENT_NO = PGUI_EVENT&( PGUI_EVENT_OFFSET& ) - 1
  724. 7240  PGUI_OFFSET& = PGUI_EVENT_NO * PGUI_EVENT_DATA_SIZE + 1 + PGUI_EVENT_OFFSET&
  725. 7250  PGUI_CRASH = 0
  726. 7260  WHILE PGUI_CRASH = 0 AND PGUI_EVENT_NO => 0
  727. 7270   IF PGUI_MOUSE_WY <= PGUI_EVENT&( PGUI_OFFSET& + 3 ) THEN
  728. 7280   IF PGUI_MOUSE_WY => PGUI_EVENT&( PGUI_OFFSET& + 1 ) THEN
  729. 7290   IF PGUI_MOUSE_WX <= PGUI_EVENT&( PGUI_OFFSET& + 2 ) THEN
  730. 7300   IF PGUI_MOUSE_WX => PGUI_EVENT&( PGUI_OFFSET& ) THEN
  731. 7310    PGUI_CRASH = - 1
  732. 7320   ENDIF
  733. 7330   ENDIF
  734. 7340   ENDIF
  735. 7350   ENDIF
  736. 7360   PGUI_EVENT_NO = PGUI_EVENT_NO - 1
  737. 7370   PGUI_OFFSET& = PGUI_OFFSET& - PGUI_EVENT_DATA_SIZE
  738. 7380  WEND
  739. 7390  PGUI_OFFSET& = PGUI_OFFSET& + PGUI_EVENT_DATA_SIZE
  740. 7400  PGUI_EVENT_NO = PGUI_EVENT_NO + 1
  741. 7410  RETURN
  742. 7420 '
  743. 7430 ' *PGUI_EVENT_ENTRY
  744. 7440 '  イベントデータをエントリします。
  745. 7450 '
  746. 7460 '  PGUI_DRAG                 ドラッグ可能指定
  747. 7470 '  PGUI_PARTS_NO             イベント発生時の呼出し部品番号
  748. 7480 '  PGUI_CALL_PRA&            イベント発生時に渡すパラメータ
  749. 7490 '  PGUI_EVSX / SY / WX / WY  イベント領域の大きさ / PGUI_EVENT_AS 指定時は省略可
  750. 7500 '
  751. 7510 *PGUI_EVENT_ENTRY
  752. 7520  PGUI_EVENT&( PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY )) = PGUI_EVENT&( PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY )) + 1
  753. 7530  PGUI_CALL_PARTS_NO = PGUI_PARTS_NO
  754. 7540  IF PGUI_EVENT_AS THEN
  755. 7550    PGUI_EVSX = PGUI_E_SX : PGUI_EVSY = PGUI_E_SY
  756. 7560    PGUI_EVWX = PGUI_E_WX : PGUI_EVWY = PGUI_E_WY
  757. 7570  ENDIF
  758. 7580  PGUI_EVEX = PGUI_EVSX + PGUI_EVWX - 1 : PGUI_EVEY = PGUI_EVSY + PGUI_EVWY - 1
  759. 7590  PGUI_EVENT&( PGUI_EV_ENTRY&     ) = PGUI_EVSX
  760. 7600  PGUI_EVENT&( PGUI_EV_ENTRY& + 1 ) = PGUI_EVSY
  761. 7610  PGUI_EVENT&( PGUI_EV_ENTRY& + 2 ) = PGUI_EVEX
  762. 7620  PGUI_EVENT&( PGUI_EV_ENTRY& + 3 ) = PGUI_EVEY
  763. 7630  PGUI_EVENT&( PGUI_EV_ENTRY& + 4 ) = PGUI_CALL_PARTS_NO
  764. 7640  PGUI_EVENT&( PGUI_EV_ENTRY& + 5 ) = PGUI_CALL_PRA&
  765. 7650  PGUI_EVENT&( PGUI_EV_ENTRY& + 6 ) = PGUI_DRAG
  766. 7660  PGUI_EV_ENTRY& = PGUI_EV_ENTRY& + PGUI_EVENT_DATA_SIZE
  767. 7670  PGUI_EVENT_AS = 0 : PGUI_EVENT = 0 : PGUI_DRAG = 0
  768. 7680  RETURN
  769. 7690 '
  770. 7700 ' *PGUI_WIN_OPEN
  771. 7710 '
  772. 7720 ' ウィンドウをオープンします。
  773. 7730 ' オープンするウィンドウは、既に登録されていなければなりません。
  774. 7740 '
  775. 7750 '  PGUI_NAME$  オープンするウィンドウ名
  776. 7760 '  
  777. 7770 '
  778. 7780 *PGUI_WIN_OPEN
  779. 7790  PGUI_WIN_OPEN_HISTORY = PGUI_WIN_OPEN_HISTORY + 1
  780. 7800  GOSUB *PGUI_GET_WIN_NO
  781. 7810  IF PGUI_ERROR = 41 THEN PRINT "指定のウィンドウ名 "+PGUI_NAME$+" は存在しません。"
  782. 7820  GOSUB *PGUI_WIN_ACTIVE
  783. 7830  PGUI_WIN_OPEN_HISTORY( PGUI_WIN_OPEN_HISTORY ) = PGUI_WIN_NO
  784. 7840  '
  785. 7850  PGUI_SYS$ = "FIRST"
  786. 7860  IF PGUI_WIN_TYPE$ <> "DRAW" THEN
  787. 7870    GET@A( 0 , 0 )-( PGUI_WIN_WX_M1 , PGUI_WIN_WY_M1 ),PGUI_WIN_BUF% , PGUI_WIN_BUF_OFFSET&
  788. 7880    PGUI_WIN_BUF_OFFSET& = PGUI_WIN_BUF_OFFSET& + FNG_BUF_DIM&( PGUI_WIN_WX , PGUI_WIN_WY , PGUI_BITS_PAR_SAMPLE , 2 )
  789. 7890    PGUI_FAST_DRAW_VOID = -1
  790. 7900  ENDIF
  791. 7910  GOSUB *PGUI_WINDOW
  792. 7920  '
  793. 7930  IF PGUI&( PGUI_WIN_OFFSET& + 1 ) > 1 THEN
  794. 7940  FOR PGUI_PARTS_NO = 1 TO PGUI&( PGUI_WIN_OFFSET& + 1 ) - 1
  795. 7950    GOSUB *PGUI_PARTS_ACTIVE : GOSUB *PGUI_PARTS_ACCESS
  796. 7960  NEXT
  797. 7970  ENDIF
  798. 7980  RETURN
  799. 7990 '
  800. 8000 ' *PGUI_PARTS_ACCESS
  801. 8010 '
  802. 8020 ' 指定の部品へ分岐します。
  803. 8030 '
  804. 8040 ' PGUI_TYPE$    分岐する部品種類名
  805. 8050 '
  806. 8060 *PGUI_PARTS_ACCESS
  807. 8070  IF PGUI_TYPE$ = "ICON"             GOSUB *PGUI_ICON       : GOTO *PGUI_P001
  808. 8080  IF PGUI_TYPE$ = "BUTTON"           GOSUB *PGUI_BUTTON     : GOTO *PGUI_P001
  809. 8090  IF PGUI_TYPE$ = "LETTER"           GOSUB *PGUI_LETTER     : GOTO *PGUI_P001
  810. 8100  IF PGUI_TYPE$ = "LIST MENU"        GOSUB *PGUI_LIST_MENU  : GOTO *PGUI_P001
  811. 8110  IF PGUI_TYPE$ = "SCROLL BAR"       GOSUB *PGUI_SCROLL_BAR : GOTO *PGUI_P001
  812. 8120  IF PGUI_TYPE$ = "SCROLL LIST MENU" GOSUB *PGUI_SCROLL_LIST_MENU : GOTO *PGUI_P001
  813. 8130  *PGUI_P001
  814. 8140  RETURN
  815. 8150 '
  816. 8160 ' *PGUI_WINDOW
  817. 8170 '
  818. 8180 '  ウィンドウ枠の登録・表示等を管理します。
  819. 8190 '
  820. 8200 *PGUI_WINDOW
  821. 8210  IF PGUI_SYS$ = "FIRST" THEN
  822. 8220    PGUI_DRAW$ = PGUI_FORM$
  823. 8230    IF PGUI_FORM$ = "ROUND"   THEN PGUI_DRAW_R = 12
  824. 8240    IF PGUI_FORM$ <> "" THEN GOSUB *PGUI_DRAW
  825. 8250  ENDIF
  826. 8260  IF PGUI_SYS$ = "ENTRY" THEN
  827. 8270    PGUI_WIN_ENTRY = PGUI_WIN_ENTRY + 1
  828. 8280    PGUI_PARTS_NO_ENTRY = 0
  829. 8290    '
  830. 8300    PGUI_WIN_OFFSET& = PGUI_PARTS_ENTRY&
  831. 8310    PGUI_WIN_OFFSET&( PGUI_WIN_ENTRY ) = PGUI_WIN_OFFSET&
  832. 8320    PGUI&( PGUI_WIN_OFFSET& ) = PGUI_CHAR_ENTRY&
  833. 8330    PGUI$( PGUI_CHAR_ENTRY& ) = PGUI_NAME$
  834. 8340    PGUI_PARTS_ENTRY& = PGUI_PARTS_ENTRY& + PGUI_WIN_HEADER_SIZE
  835. 8350    PGUI_CHAR_ENTRY& = PGUI_CHAR_ENTRY& + 1
  836. 8360    '
  837. 8370    GOSUB *PGUI_POS_CALC
  838. 8380    PGUI_EVENT_OFFSET&( PGUI_WIN_ENTRY ) = PGUI_EV_ENTRY&
  839. 8390    PGUI_EV_ENTRY& = PGUI_EV_ENTRY& + 1
  840. 8400    '
  841. 8410    PGUI_EVSX = 0 : PGUI_EVSY = 0 : PGUI_EVWX = PGUI_WX : PGUI_EVWY = PGUI_WY
  842. 8420    PGUI_EVENT = -1 : PGUI_DRAG = 1
  843. 8430  ENDIF
  844. 8440  RETURN
  845. 8450 '
  846. 8460 ' *PGUI_ICON
  847. 8470 '
  848. 8480 '  アイコンを管理します。
  849. 8490 '
  850. 8500 *PGUI_ICON
  851. 8510  IF PGUI_SYS$ = "FIRST" THEN
  852. 8520    PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY
  853. 8530    PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY
  854. 8540    IF PGUI_FORM$ = "24DOT" THEN GOSUB *PGUI_DRAW_ICON24 ELSE GOSUB *PGUI_DRAW_ICON12
  855. 8550  ENDIF
  856. 8560  IF PGUI_SYS$ = "ENTRY" THEN
  857. 8570    IF PGUI_TYPE$ = "ICON24" THEN
  858. 8580      PGUI_FORM$ = "24DOT" : PGUI_E_WX = 24 : PGUI_E_WY = 24
  859. 8590    ELSE
  860. 8600      PGUI_FORM$ = "12DOT" : PGUI_E_WX = 12 : PGUI_E_WY = 12
  861. 8610    ENDIF
  862. 8620    PGUI_E_TYPE$ = "ICON"
  863. 8630  ENDIF
  864. 8640  RETURN
  865. 8650 '
  866. 8660 ' *PGUI_LETTER
  867. 8670 '
  868. 8680 '  ローカルフォントで文字を表示します。
  869. 8690 '
  870. 8700 *PGUI_LETTER
  871. 8710  IF PGUI_SYS$ = "FIRST" THEN
  872. 8720   IF PGUI_DISP$ = "" THEN RETURN
  873. 8730   PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY
  874. 8740   IF PGUI_FORM$ = "SYSTEM12" THEN
  875. 8750    SYMBOL( PGUI_DRAW_SX , PGUI_DRAW_SY ),PGUI_DISP$,PGUI_SYMBOL_M!,PGUI_SYMBOL_M!
  876. 8760   ELSE
  877. 8770    PGUI_DRAW_WX = 12 : PGUI_DRAW_WY = 12
  878. 8780    PGUI_LETTER_SX = PGUI_SX
  879. 8790    FOR PGUI_WORK_I = 1 TO LEN( PGUI_DISP$ )
  880. 8800     PGUI_LETTER$ = MID$( PGUI_DISP$ , PGUI_WORK_I , 1 )
  881. 8810     IF PGUI_LETTER$ <> " " THEN
  882. 8820      PGUI_DATA& = ASC( PGUI_LETTER$ ) + 12 '- 48 + 60
  883. 8830      PGUI_DRAW_SX = PGUI_LETTER_SX
  884. 8840      GOSUB *PGUI_DRAW_ICON12
  885. 8850     ENDIF
  886. 8860     PGUI_LETTER_SX = PGUI_LETTER_SX + 12
  887. 8870    NEXT
  888. 8880   ENDIF
  889. 8890  ENDIF
  890. 8900  IF  PGUI_SYS$ = "ENTRY" THEN
  891. 8910    PGUI_E_EY = 12
  892. 8920    IF PGUI_FORM$ = "SYSTEM12" THEN PGUI_E_WX = 6 ELSE PGUI_E_WX = 12
  893. 8930  ENDIF
  894. 8940  RETURN
  895. 8950 '
  896. 8960 ' *PGUI_BUTTON
  897. 8970 '
  898. 8980 ' ボタンを管理します。
  899. 8990 '
  900. 9000 '  PGUI_SX / SY / WX / WY / DISP$
  901. 9010 '  FORM$ = "ROUND" / "SQUARE" / "CLOSE" / "3D" / "SIMPLE 3D"
  902. 9020 '
  903. 9030 *PGUI_BUTTON
  904. 9040  IF PGUI_SYS$ = "FIRST" THEN
  905. 9050    PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY
  906. 9060    PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY
  907. 9070    '
  908. 9080    IF PGUI_FORM$ = "ROUND"  THEN PGUI_DRAW$ = "ROUND" : PGUI_DRAW_R = 4
  909. 9090    IF PGUI_FORM$ = "SQUARE" THEN PGUI_DRAW$ = "RECTANGLE"
  910. 9100    IF PGUI_FORM$ = "CLOSE"  THEN PGUI_DRAW$ = "CLOSE"
  911. 9110    IF PGUI_FORM$ = "3D"     THEN PGUI_DRAW$ = "3D" : PGUI_HEIGHT = 2
  912. 9120    IF PGUI_FORM$ = "SIMPLE 3D" THEN PGUI_DRAW$="SIMPLE 3D" : PGUI_HEIGHT = 2
  913. 9130    GOSUB *PGUI_DRAW
  914. 9140    '
  915. 9150    SYMBOL( PGUI_DRAW_SX + PGUI_DISP_SX , PGUI_DRAW_SY + PGUI_DISP_SY ),PGUI_DISP$,PGUI_SYMBOL_M!,PGUI_SYMBOL_M!
  916. 9160  ENDIF
  917. 9170  IF PGUI_SYS$ = "ENTRY" THEN
  918. 9180    PGUI_DISP_WX = PGUI_FONT_WX * LEN( PGUI_DISP$ )
  919. 9190    PGUI_E_WX = PGUI_WX : PGUI_E_WY = PGUI_WY
  920. 9200    IF PGUI_WX = 0 THEN PGUI_SPACE_X = 12 : PGUI_E_WX = PGUI_DISP_WX + PGUI_SPACE_X * 2
  921. 9210    IF PGUI_WY = 0 THEN PGUI_SPACE_Y = 4 : PGUI_E_WY = PGUI_FONT_WY + PGUI_SPACE_Y * 2
  922. 9220    IF PGUI_FORM$ = "CLOSE" THEN PGUI_SX = 2 : PGUI_SY = 2 : PGUI_E_WX = 12 : PGUI_E_WY = 12
  923. 9230    PGUI_DISP_SX = INT( PGUI_E_WX - PGUI_DISP_WX )/ 2
  924. 9240    PGUI_DISP_SY = INT( PGUI_E_WY - PGUI_FONT_WY )/ 2
  925. 9250    PGUI_EVENT_AS = -1
  926. 9260  ENDIF
  927. 9270  RETURN
  928. 9280 '
  929. 9290 ' *PGUI_SCROLL_LIST_MENU ( Hybrid parent )
  930. 9300 '
  931. 9310 ' スクロールバー付リストメニューを管理します。
  932. 9320 '
  933. 9330 '  TYPE$ = "SCROLL LIST MENU"
  934. 9340 '  SX / SY / WX / DISP_WY
  935. 9350 '  START_Y / LIST_BUF_SIZE / MAX_Y / MIN_Y
  936. 9360 '
  937. 9370 '  RETURN$ 
  938. 9380 '
  939. 9390 '
  940. 9400 *PGUI_SCROLL_LIST_MENU
  941. 9410  IF PGUI_SYS$ = "UPDATE" THEN
  942. 9420    '
  943. 9430    '
  944. 9440    '
  945. 9450    '
  946. 9460    '
  947. 9470  ENDIF
  948. 9480  IF PGUI_SYS$ = "ENTRY" THEN
  949. 9490    GOSUB *PGUI_ENTRY_WORK
  950. 9500    '
  951. 9510    PGUI_SCROLL_LIST_MENU_WORK_NO& = PGUI_PARTS_NO_ENTRY
  952. 9520    PGUI_TYPE$ = "LIST MENU"
  953. 9530    PGUI_START_Y = 0
  954. 9540    GOSUB *PGUI_ENTRY
  955. 9550    '
  956. 9560    PGUI_TYPE$ = "SCROLL BAR"
  957. 9570    PGUI_SX = PGUI_SX + PGUI_WX + 2
  958. 9580    PGUI_WX = 16 : PGUI_WY = PGUI_DISP_SY*2 + PGUI_DISP_WY * ( PGUI_FONT_WY + PGUI_LINE_SPACE )
  959. 9590    GOSUB *PGUI_ENTRY
  960. 9600  ENDIF
  961. 9610  RETURN
  962. 9620 '
  963. 9630 ' *PGUI_LIST_MENU
  964. 9640 '
  965. 9650 ' リストメニューを管理します。
  966. 9660 '
  967. 9670 '  PGUI_FORM$     "MENU" 選択可能 / "VIEW" 閲覧のみ
  968. 9680 '  PGUI_SX / SY   リスト表示位置(ウィンドウ内座標)
  969. 9690 '  PGUI_MAX_Y     総項目数
  970. 9700 '  PGUI_DISP_WY   表示項目行数(デフォルトは10行)
  971. 9710 '  PGUI_START_Y   何行目から表示するか
  972. 9720 '  PGUI_LIST_BUF_SIZE& 確保するリストデーター格納用領域の大きさ(単位は行)
  973. 9730 '
  974. 9740 '<RETURN>
  975. 9750 '  PGUI_LIST_OFFSET&  リストデーター格納先頭オフセット
  976. 9760 '<AFTER>
  977. 9770 '  PGUI_LIST$(x)      リストデーター格納用変数
  978. 9780 '
  979. 9790 *PGUI_LIST_MENU
  980. 9800  IF PGUI_SYS$ = "EVENT" THEN
  981. 9810 '
  982. 9820 '
  983. 9830 '
  984. 9840 '
  985. 9850 '
  986. 9860 '
  987. 9870  ENDIF
  988. 9880  IF PGUI_SYS$ = "UPDATE" THEN
  989. 9890    '
  990. 9900    '
  991. 9910    '
  992. 9920    '
  993. 9930    '
  994. 9940  ENDIF
  995. 9950  IF PGUI_SYS$ = "FIRST" THEN
  996. 9960    PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY
  997. 9970    PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY
  998. 9980    PGUI_DRAW$ = "SQUARE"
  999. 9990    GOSUB *PGUI_DRAW
  1000. 10000    '
  1001. 10010    PGUI_WORK_SX = PGUI_SX + PGUI_DISP_SX : PGUI_WORK_SY = PGUI_SY + PGUI_DISP_SY
  1002. 10020    PGUI_WORK_ADD = PGUI_FONT_WY + PGUI_LINE_SPACE
  1003. 10030    FOR PGUI_Y = 0 TO PGUI_DISP_WY - 1
  1004. 10040      PGUI_WORK = PGUI_START_Y + PGUI_Y
  1005. 10050      IF PGUI_WORK < PGUI_MAX_Y THEN
  1006. 10060        SYMBOL(PGUI_WORK_SX,PGUI_WORK_SY),PGUI_LIST$( PGUI_LIST_OFFSET&+PGUI_WORK ),PGUI_SYMBOL_M!,PGUI_SYMBOL_M!
  1007. 10070        PGUI_WORK_SY = PGUI_WORK_SY + PGUI_WORK_ADD
  1008. 10080      ENDIF
  1009. 10090    NEXT
  1010. 10100  ENDIF
  1011. 10110  IF PGUI_SYS$ = "ENTRY" THEN
  1012. 10120    IF PGUI_DISP_WY = 0 THEN PGUI_DISP_WY = 10
  1013. 10130    PGUI_LINE_SPACE = 2 : PGUI_DISP_SX = 2 : PGUI_DISP_SY = 2
  1014. 10140    PGUI_E_WY = PGUI_DISP_SY * 2 + PGUI_DISP_WY * ( PGUI_FONT_WY + PGUI_LINE_SPACE )
  1015. 10150    IF PGUI_FORM$ = "MENU" THEN
  1016. 10160      PGUI_EVSX = PGUI_SX + PGUI_DISP_SX : PGUI_EVWX = PGUI_WX - 1 - PGUI_DISP_SX
  1017. 10170      PGUI_EVWY = PGUI_FONT_WY + PGUI_LINE_SPACE
  1018. 10180      PGUI_EVSY = PGUI_SY + PGUI_DISP_SY + PGUI_EVWY * ( PGUI_DISP_WY - 1 )
  1019. 10190      FOR PGUI_LIST_MENU_WORK = PGUI_DISP_WY - 1 TO 0 STEP - 1
  1020. 10200        PGUI_CALL_PRA& = PGUI_LIST_MENU_WORK
  1021. 10210        GOSUB *PGUI_EVENT_ENTRY
  1022. 10220        PGUI_EVSY = PGUI_EVSY - PGUI_EVWY
  1023. 10230      NEXT
  1024. 10240    ENDIF
  1025. 10250  ENDIF
  1026. 10260  RETURN
  1027. 10270 '
  1028. 10280 ' *PGUI_SCROLL_BAR ( Hybrid parent )
  1029. 10290 '
  1030. 10300 ' スクロールバーを管理します。
  1031. 10310 '
  1032. 10320 '  PGUI_FORM$    "FLUENT" / "MOUSE RELEASE"
  1033. 10330 '  PGUI_MAX_Y    最大項目番号
  1034. 10340 '  PGUI_DISP_WY  アクティブ項目数
  1035. 10350 '  PGUI_START_Y  現在の先頭項目番号
  1036. 10360 '
  1037. 10370 *PGUI_SCROLL_BAR
  1038. 10380  IF PGUI_SYS$ = "FIRST" THEN
  1039. 10390    PGUI_DRAW_SX = PGUI_SX : PGUI_DRAW_SY = PGUI_SY
  1040. 10400    PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY - PGUI_WX * 2 + 1
  1041. 10410    PGUI_DRAW$ = "RECTANGLE"
  1042. 10420    GOSUB *PGUI_DRAW
  1043. 10430    '
  1044. 10440    PGUI_DRAW_SX = PGUI_DRAW_SX + 1 : PGUI_DRAW_SY = PGUI_DRAW_SY + 1
  1045. 10450    PGUI_DRAW_WX = PGUI_DRAW_WX - 2 : PGUI_DRAW_WY = PGUI_DRAW_WY - 2
  1046. 10460    PGUI_DRAW_HEIGHT = 2
  1047. 10470    PGUI_DRAW$ = "SIMPLE 3D"
  1048. 10480    GOSUB *PGUI_DRAW
  1049. 10490  ENDIF
  1050. 10500  IF PGUI_SYS$ = "ENTRY" THEN
  1051. 10510    GOSUB *PGUI_ENTRY_WORK
  1052. 10520    '
  1053. 10530    PGUI_TYPE$ = "BUTTON" : PGUI_FORM$ = "SIMPLE 3D"
  1054. 10540    PGUI_RETURN$ = "上に1つスクロール"
  1055. 10550    PGUI_SY = PGUI_SY + PGUI_WY - PGUI_WX : PGUI_WY = PGUI_WX
  1056. 10560    PGUI_LINK_PARTS_NO = PGUI_PARTS_NO
  1057. 10570    PGUI_DATA& = PGUI_SCROLL_LIST_MENU_WORK_NO&
  1058. 10580    GOSUB *PGUI_ENTRY
  1059. 10590    '
  1060. 10600    PGUI_RETURN$ = "下に1つスクロール"
  1061. 10610    PGUI_SY = PGUI_SY - PGUI_WX
  1062. 10620    GOSUB *PGUI_ENTRY
  1063. 10630    '
  1064. 10640    PGUI_TYPE$ = "ICON12"
  1065. 10650    PGUI_SX = PGUI_SX + (( PGUI_WX - 12 ) / 2 )
  1066. 10660    PGUI_SY = PGUI_SY + (( PGUI_WY - 12 ) / 2 ) : PGUI_DATA& = 0
  1067. 10670    GOSUB *PGUI_ENTRY
  1068. 10680    '
  1069. 10690    PGUI_SY = PGUI_SY + PGUI_WX : PGUI_DATA& = 1
  1070. 10700    GOSUB *PGUI_ENTRY
  1071. 10710  ENDIF
  1072. 10720  RETURN
  1073. 10730 '
  1074. 10740 ' *PGUI_WIN_ACTIVE
  1075. 10750 '
  1076. 10760 '  指定した番号のウィンドウをアクティブにします。
  1077. 10770 '
  1078. 10780 '  PGUI_WIN_NO         アクティブにするウィンドウ番号
  1079. 10790 '<RETURN>
  1080. 10800 '  PGUI_WIN_NAME$      ウィンドウ名
  1081. 10810 '  PGUI_WIN_OFFSET&    ウィンドウのデーターオフセット
  1082. 10820 '  PGUI_EVENT_OFFSET&  イベントデータのオフセット
  1083. 10830 '
  1084. 10840 *PGUI_WIN_ACTIVE
  1085. 10850  PGUI_WIN_OFFSET& = PGUI_WIN_OFFSET&( PGUI_WIN_NO )
  1086. 10860  PGUI_NAME$ = PGUI$( PGUI&( PGUI_WIN_OFFSET& ))
  1087. 10870  PGUI_EVENT_OFFSET& = PGUI_EVENT_OFFSET&( PGUI_WIN_NO )
  1088. 10880  '
  1089. 10890  PGUI_PARTS_NO = 0
  1090. 10900  GOSUB *PGUI_PARTS_ACTIVE
  1091. 10910  '
  1092. 10920  PGUI_WIN_SX = PGUI_SX : PGUI_WIN_SY = PGUI_SY
  1093. 10930  PGUI_WIN_WX = PGUI_WX : PGUI_WIN_WY = PGUI_WY
  1094. 10940  PGUI_WIN_WX_M1 = PGUI_WX - 1 : PGUI_WIN_WY_M1 = PGUI_WY - 1
  1095. 10950  PGUI_WIN_EX = PGUI_SX + PGUI_WIN_WX_M1 : PGUI_WIN_EY = PGUI_SY + PGUI_WIN_WY_M1
  1096. 10960  IF PGUI_DATA& THEN PGUI_WIN_TYPE$ = "DRAW" ELSE PGUI_WIN_TYPE$ = "BUFFERING"
  1097. 10970  '
  1098. 10980  PGUI_DRAW_SX = 0 : PGUI_DRAW_SY = 0
  1099. 10990  PGUI_DRAW_WX = PGUI_WX : PGUI_DRAW_WY = PGUI_WY
  1100. 11000  GOSUB *PGUI_DRAW_WIN_SET
  1101. 11010  PGUI_WIN_OUT = PGUI_OUT OR PGUI_VIEW_DSX OR PGUI_VIEW_DSY OR PGUI_VIEW_DEX OR PGUI_VIEW_DEY
  1102. 11020  RETURN
  1103. 11030 '
  1104. 11040 ' *PGUI_GET_WIN_NO
  1105. 11050 '
  1106. 11060 '  ウィンドウ名からウィンドウ番号を検索します。
  1107. 11070 '  PGUI_NAME$      検索するウィンドウ名
  1108. 11080 '<RETURN>
  1109. 11090 '  PGUI_WIN_NO     ウィンドウ番号
  1110. 11100 '
  1111. 11110 *PGUI_GET_WIN_NO
  1112. 11120  PGUI_WIN_NO = 0 : PGUI_WORK$ = "" : PGUI_ERROR = 0
  1113. 11130  WHILE ( PGUI_WIN_NO <> PGUI_WIN_ENTRY + 1 ) AND ( PGUI_NAME$ <> PGUI_WORK$ )
  1114. 11140    PGUI_WIN_NO = PGUI_WIN_NO + 1
  1115. 11150    PGUI_WIN_OFFSET& = PGUI_WIN_OFFSET&( PGUI_WIN_NO )
  1116. 11160    PGUI_WORK$ = PGUI$( PGUI&( PGUI_WIN_OFFSET& ))
  1117. 11170  WEND
  1118. 11180  IF PGUI_WIN_NO = PGUI_WIN_ENTRY + 1 THEN PGUI_ERROR = 41
  1119. 11190  RETURN
  1120. 11200 '
  1121. 11210 ' *PGUI_WIN_CLOSE
  1122. 11220 '
  1123. 11230 ' ウィンドウをクローズします。
  1124. 11240 '
  1125. 11250 *PGUI_WIN_CLOSE
  1126. 11260  IF PGUI_WIN_TYPE$ <> "DRAW" THEN
  1127. 11270    PGUI_WIN_BUF_OFFSET& = PGUI_WIN_BUF_OFFSET& - FNG_BUF_DIM&( PGUI_WIN_WX , PGUI_WIN_WY , PGUI_BITS_PAR_SAMPLE , 2 )
  1128. 11280    PUT@A( 0 , 0 )-( PGUI_WIN_WX_M1 , PGUI_WIN_WY_M1 ),PGUI_WIN_BUF%,,,,,PGUI_WIN_BUF_OFFSET&
  1129. 11290    PGUI_FAST_DRAW_VOID = -1
  1130. 11300  ENDIF
  1131. 11310  GOSUB *PGUI_DRAW_WIN_RETURN
  1132. 11320  '
  1133. 11330  PGUI_WIN_OPEN_HISTORY = PGUI_WIN_OPEN_HISTORY - 1
  1134. 11340  PGUI_WIN_NO = PGUI_WIN_OPEN_HISTORY( PGUI_WIN_OPEN_HISTORY )
  1135. 11350  GOSUB *PGUI_WIN_ACTIVE
  1136. 11360  RETURN
  1137. 11370 '
  1138. 11380 ' *PGUI_DRAW_WIN_SET
  1139. 11390 ' GUIウィンドウ内座標に、部品描画用ウィンドウ座標を設定します。
  1140. 11400 '  PGUI_DRAW_SX / SY
  1141. 11410 '  PGUI_DRAW_WX / WY
  1142. 11420 '
  1143. 11430 *PGUI_DRAW_WIN_SET
  1144. 11440  PGUI_DRAW_EX = PGUI_DRAW_SX + PGUI_DRAW_WX - 1
  1145. 11450  PGUI_DRAW_EY = PGUI_DRAW_SY + PGUI_DRAW_WY - 1
  1146. 11460  '
  1147. 11470  GOSUB *PGUI_DRAW_WIN_WORK
  1148. 11480  '
  1149. 11490  PGUI_DRAW_WIN_NO = PGUI_DRAW_WIN_NO + 1
  1150. 11500  PGUI_DRAW_WIN_WORK = PGUI_DRAW_WIN_NO * 4
  1151. 11510  PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK     ) = PGUI_DRAW_SX
  1152. 11520  PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 1 ) = PGUI_DRAW_SY
  1153. 11530  PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 2 ) = PGUI_DRAW_EX
  1154. 11540  PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 3 ) = PGUI_DRAW_EY
  1155. 11550  RETURN
  1156. 11560 '
  1157. 11570 ' *PGUI_DRAW_WIN_RETURN
  1158. 11580 '  部品描画用ウィンドウ座標を復元します。
  1159. 11590 '
  1160. 11600 *PGUI_DRAW_WIN_RETURN
  1161. 11610  PGUI_DRAW_WIN_NO = PGUI_DRAW_WIN_NO - 1
  1162. 11620  PGUI_DRAW_WIN_WORK = PGUI_DRAW_WIN_NO * 4
  1163. 11630  PGUI_DRAW_SX = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK )
  1164. 11640  PGUI_DRAW_SY = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 1 )
  1165. 11650  PGUI_DRAW_EX = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 2 )
  1166. 11660  PGUI_DRAW_EY = PGUI_DRAW_WIN%( PGUI_DRAW_WIN_WORK + 3 )
  1167. 11670  '
  1168. 11680  PGUI_DRAW_WX = PGUI_DRAW_EX - PGUI_DRAW_SX + 1
  1169. 11690  PGUI_DRAW_WY = PGUI_DRAW_EY - PGUI_DRAW_SY + 1
  1170. 11700  '
  1171. 11710  GOSUB *PGUI_DRAW_WIN_WORK
  1172. 11720  RETURN
  1173. 11730 '
  1174. 11740 ' *PGUI_DRAW_WIN_WORK
  1175. 11750 '
  1176. 11760 ' 部品描画用ウィンドウを設定します
  1177. 11770 ' (VRAM外に設定した場合も考慮しています)
  1178. 11780 '
  1179. 11790 *PGUI_DRAW_WIN_WORK
  1180. 11800  PGUI_VIEW_SX = PGUI_DRAW_SX + PGUI_WIN_SX
  1181. 11810  PGUI_VIEW_SY = PGUI_DRAW_SY + PGUI_WIN_SY
  1182. 11820  PGUI_VIEW_EX = PGUI_DRAW_EX + PGUI_WIN_SX
  1183. 11830  PGUI_VIEW_EY = PGUI_DRAW_EY + PGUI_WIN_SY
  1184. 11840  PGUI_OUT = ( PGUI_VIEW_SX > PGUI_RESO_X_M1 ) OR ( PGUI_VIEW_SY > PGUI_RESO_Y_M1 ) OR ( PGUI_VIEW_EX < 0 ) OR ( PGUI_VIEW_EY < 0 )
  1185. 11850  IF PGUI_OUT THEN
  1186. 11860    WINDOW( 32768 , 32768 )-( 32768 + PGUI_RESO_X_M1 , 32768 + PGUI_RESO_Y_M1 )
  1187. 11870  ELSE
  1188. 11880    PGUI_VIEW_DEX = 0 : PGUI_VIEW_DEY = 0
  1189. 11890    IF PGUI_VIEW_SX < 0 THEN PGUI_VIEW_DSX = - PGUI_VIEW_SX ELSE PGUI_VIEW_DSX = 0
  1190. 11900    IF PGUI_VIEW_SY < 0 THEN PGUI_VIEW_DSY = - PGUI_VIEW_SY ELSE PGUI_VIEW_DSY = 0
  1191. 11910    IF PGUI_VIEW_EX > PGUI_RESO_X_M1 THEN PGUI_VIEW_DEX = PGUI_VIEW_EX - PGUI_RESO_X_M1
  1192. 11920    IF PGUI_VIEW_EY > PGUI_RESO_Y_M1 THEN PGUI_VIEW_DEY = PGUI_VIEW_EY - PGUI_RESO_Y_M1
  1193. 11930    WINDOW( PGUI_VIEW_DSX , PGUI_VIEW_DSY )-( PGUI_DRAW_WX - 1 - PGUI_VIEW_DEX , PGUI_DRAW_WY - 1 - PGUI_VIEW_DEY )
  1194. 11940    VIEW( PGUI_VIEW_SX + PGUI_VIEW_DSX , PGUI_VIEW_SY + PGUI_VIEW_DSY )-( PGUI_VIEW_EX - PGUI_VIEW_DEX , PGUI_VIEW_EY - PGUI_VIEW_DEY )
  1195. 11950  ENDIF
  1196. 11960  RETURN
  1197. 11970 '
  1198. 11980 ' *PGUI_ENTRY
  1199. 11990 '
  1200. 12000 ' 部品登録の窓口です。ハイブリッド部品は、内部で複数の単独部品に変換されます。
  1201. 12010 ' 日本語等で感覚的に指定したGUIデーターを、内部形式にコンバート
  1202. 12020 ' します。
  1203. 12030 '
  1204. 12040 ' 位置・サイズはコンピュータに決めさせれる場合もあります。
  1205. 12050 '
  1206. 12060 '  PGUI_TYPE$   部品の種類
  1207. 12070 '                   "WINDOW"
  1208. 12080 '                   "SCROLL BAR" / "LIST MENU" / "BUTTON" / "SWITCH"
  1209. 12090 '                   "SCROLL LIST MENU" / "ICON12" / "ICON24"
  1210. 12100 '                   "INPUT CHAR"
  1211. 12110 '  PGUI_FORM$   部品の形
  1212. 12120 '  PGUI_NAME$   部品の固有名(省略可)
  1213. 12130 '  PGUI_LINK$   リンク時のパラメータ(省略可)
  1214. 12140 '  PGUI_DISP$   部品に表示する文字列
  1215. 12150 '  PGUI_POS$    部品の配置場所(文字列指定の場合)
  1216. 12160 '
  1217. 12170 '  PGUI_SX / SY 部品のウィンドウ内座標(省略可能な場合もある)
  1218. 12180 '  PGUI_WX / WY 部品の大きさ(省略可能な場合もある)
  1219. 12190 '  PGUI_MIN_X / Y    表示(選択)可能最小項目番号(数値)
  1220. 12200 '  PGUI_MAX_X / Y    表示(選択)可能最大項目番号(数値)
  1221. 12210 '  PGUI_START_X / Y  表示開始項目番号
  1222. 12220 '  PGUI_DISP_WX / WY 表示する大きさ
  1223. 12230 '
  1224. 12240 '  PGUI_LIST_BUF_SIZE& 確保するテキストデーター格納領域の大きさを設定します。(単位は行)
  1225. 12250 '  PGUI_LIST_OFFSET& テキストデーター格納領域の先頭オフセットを返します。
  1226. 12260 '            (プログラマーが設定する必要はありません。)
  1227. 12270 '
  1228. 12280 '  PGUI_RETURN$      部品が返す文字列(LINK$ > DISP$ > NAME$ が返る)
  1229. 12290 '  PGUI_RETURN       部品が返す数値
  1230. 12300 '
  1231. 12310 ' 保持変数名
  1232. 12320 '
  1233. 12330 ' PGUI_WIN_PARTS_OFFSET&(x)  データーの先頭オフセット
  1234. 12340 ' PGUI&(x)             部品データー格納変数
  1235. 12350 ' PGUI$(x)             部品データー中の文字列格納領域
  1236. 12360 '
  1237. 12370 *PGUI_ENTRY
  1238. 12380  PGUI_SYS$ = "ENTRY"
  1239. 12390  IF PGUI_HYBRID_PARENT THEN PGUI_HYBRID_CHILD = -1 ELSE PGUI_HYBRID_CHILD = 0
  1240. 12400  IF PGUI_HYBRID_NO = 0 THEN
  1241. 12410    PGUI_HYBRID_MASTER = PGUI_PARTS_NO_ENTRY
  1242. 12420    PGUI_MASTER_OFFSET& = PGUI_PARTS_ENTRY&
  1243. 12430  ENDIF
  1244. 12440  PGUI_HYBRID_NO = PGUI_HYBRID_NO + 1
  1245. 12450  PGUI_HYBRID( PGUI_HYBRID ) = PGUI_PARTS_NO_ENTRY
  1246. 12460  PGUI_HYBRID_PARENT = 0
  1247. 12470   IF PGUI_TYPE$ = "BUTTON"    GOSUB *PGUI_BUTTON    : GOTO *PGUI_P1
  1248. 12480   IF PGUI_TYPE$ = "ICON12"    GOSUB *PGUI_ICON      : GOTO *PGUI_P1
  1249. 12490   IF PGUI_TYPE$ = "ICON24"    GOSUB *PGUI_ICON      : GOTO *PGUI_P1
  1250. 12500   IF PGUI_TYPE$ = "LETTER"    GOSUB *PGUI_LETTER    : GOTO *PGUI_P1
  1251. 12510   IF PGUI_TYPE$ = "WINDOW"    GOSUB *PGUI_WINDOW    : GOTO *PGUI_P1
  1252. 12520   IF PGUI_TYPE$ = "LIST MENU" GOSUB *PGUI_LIST_MENU : GOTO *PGUI_P1
  1253. 12530  PGUI_HYBRID_PARENT = -1
  1254. 12540   IF PGUI_TYPE$ = "SCROLL BAR"       GOSUB *PGUI_SCROLL_BAR       : GOTO *PGUI_P2
  1255. 12550   IF PGUI_TYPE$ = "SCROLL LIST MENU" GOSUB *PGUI_SCROLL_LIST_MENU : GOTO *PGUI_P2
  1256. 12560  'GOSUB *PGUI_ENTRY_HYBRID
  1257. 12570  COLOR 1 : PRINT "指定の部品種類名 「 "+PGUI_TYPE$+" 」 は、サポートされていません。":END
  1258. 12580  *PGUI_P1
  1259. 12590   GOSUB *PGUI_ENTRY_WORK
  1260. 12600  *PGUI_P2
  1261. 12610  PGUI_HYBRID_NO = PGUI_HYBRID_NO - 1
  1262. 12620  RETURN
  1263. 12630 '
  1264. 12640 ' *PGUI_ENTRY_WORK
  1265. 12650 '
  1266. 12660 ' ハイブリッド部品登録用の苦し紛れのサブルーチン
  1267. 12670 '
  1268. 12680 *PGUI_ENTRY_WORK
  1269. 12690  PGUI_PARTS_NO = PGUI_PARTS_NO_ENTRY
  1270. 12700  PGUI_PARTS_OFFSET& = PGUI_PARTS_ENTRY&
  1271. 12710  PGUI_CHAR_OFFSET& = PGUI_CHAR_ENTRY&
  1272. 12720  PGUI_ENTRY_FLAG = -1 : GOSUB *PGUI_PARTS_DATA_REGISTRATION : PGUI_ENTRY_FLAG = 0
  1273. 12730  IF PGUI_EVENT_AS OR PGUI_EVENT THEN GOSUB *PGUI_EVENT_ENTRY
  1274. 12740  PGUI_E_SX = -1 : PGUI_E_SY = -1 : PGUI_E_WX = -1 : PGUI_E_WY = -1
  1275. 12750  PGUI_PARTS_NO_ENTRY = PGUI_PARTS_NO_ENTRY + 1
  1276. 12760  PGUI&( PGUI_WIN_OFFSET& + 1 ) = PGUI_PARTS_NO_ENTRY
  1277. 12770  PGUI_PARTS_ENTRY& = PGUI_PARTS_ENTRY& + PGUI_PARTS_DATA_SIZE
  1278. 12780  PGUI_CHAR_ENTRY& = PGUI_CHAR_ENTRY& + PGUI_CHAR_DATA_SIZE
  1279. 12790  IF PGUI_HYBRID = 1 THEN
  1280. 12800    PGUI_LIST_ENTRY& = PGUI_LIST_ENTRY& + PGUI_LIST_BUF_SIZE&
  1281. 12810  ENDIF
  1282. 12820  PGUI_NAME$ = "":PGUI_RETURN$ = ""
  1283. 12830  RETURN
  1284. 12840 '
  1285. 12850 ' *PGUI_REFRESH
  1286. 12860 '
  1287. 12870 '  窓口変数を初期状態にします。
  1288. 12880 '
  1289. 12890 *PGUI_REFRESH
  1290. 12900  PGUI_TYPE$ = "" : PGUI_FORM$ = "" : PGUI_NAME$ = "" : PGUI_DISP$ = ""
  1291. 12910  PGUI_PRA$  = "" : PGUI_POS$  = "" : PGUI_DISP_POS$ = "" : PGUI_RETURN$ = ""
  1292. 12920  PGUI_SX = 0 : PGUI_SY = 0 : PGUI_WX = 0 : PGUI_WY = 0 : PGUI_DATA& = 0
  1293. 12930  PGUI_E_SX = -1 : PGUI_E_SY = -1 : PGUI_E_WX = -1 : PGUI_E_WY = -1
  1294. 12940  RETURN
  1295. 12950 '
  1296. 12960 ' *PGUI_PARTS_DATA_REGISTRATION
  1297. 12970 '
  1298. 12980 '  窓口上の部品データーを内部形式で格納します。
  1299. 12990 '
  1300. 13000 '  PGUI_PARTS_OFFSET&  部品データーの格納オフセット
  1301. 13010 '  PGUI_CHAR_OFFSET&   文字データーオフセット
  1302. 13020 '
  1303. 13030 *PGUI_PARTS_DATA_REGISTRATION
  1304. 13040  PGUI_WORK& = PGUI_PARTS_OFFSET&
  1305. 13050  IF PGUI_ENTRY_FLAG THEN
  1306. 13060    PGUI$( PGUI_CHAR_OFFSET&  + 0 ) = PGUI_NAME$
  1307. 13070  IF PGUI_E_TYPE$ = "" THEN PGUI_E_TYPE$ = PGUI_TYPE$
  1308. 13080    PGUI$( PGUI_CHAR_OFFSET&  + 1 ) = PGUI_E_TYPE$ : PGUI_E_TYPE$ = ""
  1309. 13090    PGUI$( PGUI_CHAR_OFFSET&  + 2 ) = PGUI_FORM$
  1310. 13100    PGUI&( PGUI_WORK& ) = PGUI_CHAR_ENTRY&
  1311. 13110    PGUI&( PGUI_WORK& + PGUI_OF_LIST_OFFSET ) = PGUI_LIST_ENTRY&
  1312. 13120    PGUI&( PGUI_WORK& + PGUI_OF_LIST_BUF_SIZE ) = PGUI_LIST_BUF_SIZE&
  1313. 13130    PGUI&( PGUI_WORK& + 3 ) = ABS( PGUI_HYBRID_CHILD + PGUI_HYBRID_PARENT * 2 )
  1314. 13140    PGUI&( PGUI_WORK& + PGUI_OF_MASTER_OFFSET ) = PGUI_MASTER_OFFSET&
  1315. 13150  ELSE
  1316. 13160    PGUI_CHAR_OFFSET& = PGUI&( PGUI_WORK& )
  1317. 13170  ENDIF
  1318. 13180  PGUI$( PGUI_CHAR_OFFSET& + 3 ) = PGUI_DISP$
  1319. 13190  IF PGUI_RETURN$ = "" THEN PGUI_RETURN$ = PGUI_DISP$
  1320. 13200  PGUI$( PGUI_CHAR_OFFSET& + 4 ) = PGUI_RETURN$
  1321. 13210  PGUI&( PGUI_WORK& + PGUI_OF_DISP_SX ) = PGUI_DISP_SX
  1322. 13220  PGUI&( PGUI_WORK& + PGUI_OF_DISP_SY ) = PGUI_DISP_SY
  1323. 13230  PGUI&( PGUI_WORK& + PGUI_OF_LINE_SPACE ) = PGUI_LINE_SPACE
  1324. 13240  PGUI&( PGUI_WORK& + PGUI_OF_LINK_PARTS_NO ) = PGUI_LINK_PARTS_NO
  1325. 13250  PGUI&( PGUI_WORK& + PGUI_OF_DATA ) = PGUI_DATA&
  1326. 13260  '
  1327. 13270  IF PGUI_E_SX = -1 PGUI_E_SX = PGUI_SX
  1328. 13280  IF PGUI_E_SY = -1 PGUI_E_SY = PGUI_SY
  1329. 13290  PGUI&( PGUI_WORK& + PGUI_OF_SX ) = PGUI_E_SX : PGUI&( PGUI_WORK& + PGUI_OF_SY ) = PGUI_E_SY
  1330. 13300  '
  1331. 13310  IF PGUI_E_WX = -1 PGUI_E_WX = PGUI_WX
  1332. 13320  IF PGUI_E_WY = -1 PGUI_E_WY = PGUI_WY
  1333. 13330  PGUI&( PGUI_WORK& + PGUI_OF_WX ) = PGUI_E_WX : PGUI&( PGUI_WORK& + PGUI_OF_WY ) = PGUI_E_WY
  1334. 13340  '
  1335. 13350  PGUI&( PGUI_WORK& + PGUI_OF_START_X ) = PGUI_START_X
  1336. 13360  PGUI&( PGUI_WORK& + PGUI_OF_START_Y ) = PGUI_START_Y
  1337. 13370  PGUI&( PGUI_WORK& + PGUI_OF_MAX_X ) = PGUI_MAX_X
  1338. 13380  PGUI&( PGUI_WORK& + PGUI_OF_MAX_Y ) = PGUI_MAX_Y
  1339. 13390  PGUI&( PGUI_WORK& + PGUI_OF_MIN_X ) = PGUI_MIN_X
  1340. 13400  PGUI&( PGUI_WORK& + PGUI_OF_MIN_Y ) = PGUI_MIN_Y
  1341. 13410  PGUI&( PGUI_WORK& + PGUI_OF_DISP_WX ) = PGUI_DISP_WX
  1342. 13420  PGUI&( PGUI_WORK& + PGUI_OF_DISP_WY ) = PGUI_DISP_WY
  1343. 13430  RETURN
  1344. 13440 '
  1345. 13450 ' *PGUI_PARTS_ACTIVE
  1346. 13460 '
  1347. 13470 '  指定した番号の部品をアクティブにします。
  1348. 13480 '
  1349. 13490 '  PGUI_WIN_OFFSET&  検索対象ウィンドウ・データーオフセット
  1350. 13500 '  PGUI_PARTS_NO     データーを取り出す部品番号
  1351. 13510 '                    名前からの算出は PGUI_NAME$ に部品名をセットし、*PGUI_GET_PARTS_NO
  1352. 13520 '
  1353. 13530 *PGUI_PARTS_ACTIVE
  1354. 13540  PGUI_PARTS_OFFSET& = PGUI_WIN_OFFSET& + PGUI_WIN_HEADER_SIZE + PGUI_PARTS_NO * PGUI_PARTS_DATA_SIZE
  1355. 13550  PGUI_CHAR_OFFSET& = PGUI&( PGUI_PARTS_OFFSET& )
  1356. 13560  PGUI_NAME$ = PGUI$( PGUI_CHAR_OFFSET& )
  1357. 13570  PGUI_TYPE$ = PGUI$( PGUI_CHAR_OFFSET& + 1 )
  1358. 13580  PGUI_FORM$ = PGUI$( PGUI_CHAR_OFFSET& + 2 )
  1359. 13590  PGUI_DISP$ = PGUI$( PGUI_CHAR_OFFSET& + 3 )
  1360. 13600  PGUI_RETURN$=PGUI$( PGUI_CHAR_OFFSET& + 4 )
  1361. 13610  '
  1362. 13620  PGUI_WORK& = PGUI_PARTS_OFFSET&
  1363. 13630  PGUI_MASTER_OFFSET& =    PGUI&( PGUI_WORK& + PGUI_OF_MASTER_OFFSET )
  1364. 13640  PGUI_LIST_OFFSET&  = PGUI&( PGUI_WORK& + PGUI_OF_LIST_OFFSET )
  1365. 13650  PGUI_LIST_BUF_SIZE&= PGUI&( PGUI_WORK& + PGUI_OF_LIST_BUF_SIZE )
  1366. 13660  PGUI_HYBRID_PARENT = (( PGUI&( PGUI_WORK& + 3 ) AND 2 ) = 2 )
  1367. 13670  PGUI_HYBRID_CHILD  = (( PGUI&( PGUI_WORK& + 3 ) AND 1 ) = 1 )
  1368. 13680  PGUI_DISP_SX = PGUI&( PGUI_WORK& + PGUI_OF_DISP_SX )
  1369. 13690  PGUI_DISP_SY = PGUI&( PGUI_WORK& + PGUI_OF_DISP_SY )
  1370. 13700  PGUI_LINE_SPACE    = PGUI&( PGUI_WORK& + PGUI_OF_LINE_SPACE )
  1371. 13710  PGUI_LINK_PARTS_NO = PGUI&( PGUI_WORK& + PGUI_OF_LINK_PARTS_NO )
  1372. 13720  PGUI_DATA&         = PGUI&( PGUI_WORK& + PGUI_OF_DATA )
  1373. 13730  '
  1374. 13740  PGUI_SX = PGUI&( PGUI_WORK& + PGUI_OF_SX ) : PGUI_SY = PGUI&( PGUI_WORK& + PGUI_OF_SY )
  1375. 13750  PGUI_WX = PGUI&( PGUI_WORK& + PGUI_OF_WX ) : PGUI_WY = PGUI&( PGUI_WORK& + PGUI_OF_WY )
  1376. 13760  PGUI_START_X= PGUI&( PGUI_WORK& + PGUI_OF_START_X )
  1377. 13770  PGUI_START_Y= PGUI&( PGUI_WORK& + PGUI_OF_START_Y )
  1378. 13780  PGUI_MAX_X  = PGUI&( PGUI_WORK& + PGUI_OF_MAX_X )
  1379. 13790  PGUI_MAX_Y  = PGUI&( PGUI_WORK& + PGUI_OF_MAX_Y )
  1380. 13800  PGUI_MIN_X  = PGUI&( PGUI_WORK& + PGUI_OF_MIN_X )
  1381. 13810  PGUI_MIN_Y  = PGUI&( PGUI_WORK& + PGUI_OF_MIN_Y )
  1382. 13820  PGUI_DISP_WX= PGUI&( PGUI_WORK& + PGUI_OF_DISP_WX )
  1383. 13830  PGUI_DISP_WY= PGUI&( PGUI_WORK& + PGUI_OF_DISP_WY )
  1384. 13840  RETURN
  1385. 13850 '
  1386. 13860 ' *PGUI_GET_PARTS_NO
  1387. 13870 '
  1388. 13880 '  部品名に対応する部品番号をアクティブウィンドウ内で検索します。
  1389. 13890 '
  1390. 13900 '  PGUI_NAME$          検索する部品名
  1391. 13910 '  PGUI_WIN_OFFSET&    検索対象ウィンドウのデーターオフセット
  1392. 13920 '<RETURN>
  1393. 13930 '  PGUI_PARTS_NO       ウィンドウ内部品番号
  1394. 13940 '  PGUI_ERROR          エラーサイン。正常終了なら0・見つからないなら40を返す。
  1395. 13950 '
  1396. 13960 *PGUI_GET_PARTS_NO
  1397. 13970  PGUI_PARTS_TOTAL = PGUI&( PGUI_WIN_OFFSET& + 1 )
  1398. 13980  PGUI_PARTS_NO = -1 : PGUI_WORK$ = "" : PGUI_ERROR = 0
  1399. 13990  PGUI_PARTS_OFFSET& = PGUI_WIN_OFFSET& + PGUI_WIN_HEADER_SIZE - PGUI_PARTS_DATA_SIZE
  1400. 14000  WHILE ( PGUI_PARTS_NO <> PGUI_PARTS_TOTAL ) AND ( PGUI_WORK$ <> PGUI_NAME$ )
  1401. 14010    PGUI_PARTS_NO = PGUI_PARTS_NO + 1
  1402. 14020    PGUI_PARTS_OFFSET& = PGUI_PARTS_OFFSET& + PGUI_PARTS_DATA_SIZE
  1403. 14030    PGUI_WORK$ = PGUI$( PGUI&( PGUI_PARTS_OFFSET& ))
  1404. 14040  WEND
  1405. 14050  IF PGUI_PARTS_TOTAL = PGUI_PARTS_NO THEN PGUI_ERROR = 40
  1406. 14060  IF PGUI_ERROR = 40 THEN PRINT "指定の部品名 "+PGUI_NAME$+" は存在しません。"
  1407. 14070  RETURN
  1408. 14080 '
  1409. 14090 ' *PGUI_POS_CALC
  1410. 14100 '
  1411. 14110 ' 言葉で感覚的に指定された部品座標を具体的な数値に変換します。
  1412. 14120 ' 但し、部品の大きさが分かっている必要があります。
  1413. 14130 '
  1414. 14140 '    PGUI_TYPE$    "WINDOW" の場合は、ウィンドウ内座標でなく、画面内座標を算出する。
  1415. 14150 '    PGUI_POS$     部品の感覚的位置キーワード
  1416. 14160 '                  "中央"
  1417. 14170 '    PGUI_E_WX / E_WY   部品の大きさ
  1418. 14180 ' < 返り値 >
  1419. 14190 '    PGUI_E_SX / SY  部品の位置(ウィンドウ内座標)
  1420. 14200 '
  1421. 14210 *PGUI_POS_CALC
  1422. 14220  IF PGUI_E_WX = -1 PGUI_E_WX = PGUI_WX
  1423. 14230  IF PGUI_E_WY = -1 PGUI_E_WY = PGUI_WY
  1424. 14240  '
  1425. 14250  IF PGUI_TYPE$ = "WINDOW" THEN
  1426. 14260    PGUI_WORK_WX = PGUI_RESO_X
  1427. 14270    PGUI_WORK_WY = PGUI_RESO_Y
  1428. 14280  ELSE
  1429. 14290    PGUI_WORK_WX = PGUI_WIN_WX
  1430. 14300    PGUI_WORK_WY = PGUI_WIN_WY
  1431. 14310  ENDIF
  1432. 14320  '
  1433. 14330  IF PGUI_POS$ = "中央" THEN
  1434. 14340    PGUI_E_SX = INT(( PGUI_WORK_WX - PGUI_E_WX )/ 2 )
  1435. 14350    PGUI_E_SY = INT(( PGUI_WORK_WY - PGUI_E_WY )/ 2 )
  1436. 14360  ENDIF
  1437. 14370  '
  1438. 14380  '
  1439. 14390  PGUI_BWX = PGUI_E_WX : PGUI_BWY = PGUI_E_WY
  1440. 14400  PGUI_BSX = PGUI_E_SX : PGUI_BSY = PGUI_E_SY
  1441. 14410  RETURN
  1442. 14420 '
  1443. 14430 ' *PGUI_DRAW
  1444. 14440 '
  1445. 14450 '  表示ルーチンへの分岐管理と、表示の高速化管理を行います。
  1446. 14460 '
  1447. 14470 *PGUI_DRAW
  1448. 14480  PGUI_DRAW_EX = PGUI_DRAW_SX + PGUI_DRAW_WX - 1
  1449. 14490  PGUI_DRAW_EY = PGUI_DRAW_SY + PGUI_DRAW_WY - 1
  1450. 14500  '
  1451. 14510  IF PGUI_DRAW$ = "ICON12" GOSUB *PGUI_DRAW_ICON12 : GOTO *PGUI_DRAW_P02
  1452. 14520  IF PGUI_DRAW$ = "ICON24" GOSUB *PGUI_DRAW_ICON24 : GOTO *PGUI_DRAW_P02
  1453. 14530  '
  1454. 14540  IF PGUI_DRAW_B_WX=PGUI_DRAW_WX AND PGUI_DRAW_B_WY=PGUI_DRAW_WY AND PGUI_DRAW_B$=PGUI_DRAW$ AND PGUI_TYPE$ <> "WINDOW" AND PGUI_WIN_OUT = 0 AND PGUI_FAST_DRAW_VOID = 0 THEN
  1455. 14550    PUT@A(PGUI_DRAW_SX , PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PGUI_WIN_BUF%,,,,,PGUI_WIN_BUF_OFFSET&
  1456. 14560  ELSE
  1457. 14570  IF PGUI_DRAW$ = "ROUND"     GOSUB *PGUI_DRAW_ROUND     : GOTO *PGUI_DRAW_P01
  1458. 14580  IF PGUI_DRAW$ = "RECTANGLE" GOSUB *PGUI_DRAW_RECTANGLE : GOTO *PGUI_DRAW_P01
  1459. 14590  IF PGUI_DRAW$ = "SQUARE"    GOSUB *PGUI_DRAW_RECTANGLE_FILL : GOTO *PGUI_DRAW_P01
  1460. 14600  IF PGUI_DRAW$ = "3D"        GOSUB *PGUI_DRAW_3D        : GOTO *PGUI_DRAW_P01
  1461. 14610  IF PGUI_DRAW$ = "SIMPLE 3D" GOSUB *PGUI_DRAW_SIMPLE_3D : GOTO *PGUI_DRAW_P01
  1462. 14620  IF PGUI_DRAW$ = "CLOSE"     GOSUB *PGUI_DRAW_CLOSE_BUTTON : GOTO *PGUI_DRAW_P01
  1463. 14630  IF PGUI_DRAW$ = "SQUARE2"   GOSUB *PGUI_DRAW_SQUARE2   : GOTO *PGUI_DRAW_P01
  1464. 14640  IF PGUI_DRAW$ = "T-OS"      GOSUB *PGUI_DRAW_T_OS      : GOTO *PGUI_DRAW_P01
  1465. 14650  IF PGUI_DRAW$ = "WINDOWS"   GOSUB *PGUI_DRAW_WIN_FRAME : GOTO *PGUI_DRAW_P01
  1466. 14660  *PGUI_DRAW_P01
  1467. 14670  '
  1468. 14680  IF PGUI_TYPE$ <> "WINDOW" AND PGUI_WIN_OUT = 0 THEN
  1469. 14690    PGUI_DRAW_B_WX = PGUI_DRAW_WX : PGUI_DRAW_B_WY = PGUI_DRAW_WY
  1470. 14700    PGUI_DRAW_B$ = PGUI_DRAW$ : PGUI_FAST_DRAW_VOID = 0
  1471. 14710    GET@A(PGUI_DRAW_SX , PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PGUI_WIN_BUF%,PGUI_WIN_BUF_OFFSET&
  1472. 14720  ENDIF
  1473. 14730  *PGUI_DRAW_P02
  1474. 14740  ENDIF
  1475. 14750  RETURN
  1476. 14760 '
  1477. 14770 ' *PGUI_DRAW_CLOSE_BUTTON
  1478. 14780 '
  1479. 14790 ' ウィンドウクローズ用ボタンを表示します。
  1480. 14800 '
  1481. 14810 *PGUI_DRAW_CLOSE_BUTTON
  1482. 14820  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF
  1483. 14830  CONNECT( PGUI_DRAW_SX , PGUI_DRAW_EY )-( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_SY ),7,PSET
  1484. 14840  PGUI_Y = PGUI_DRAW_SY
  1485. 14850  FOR PGUI_I = 0 TO 4
  1486. 14860    PGUI_Y = PGUI_Y + 2
  1487. 14870    LINE( PGUI_DRAW_SX + 2 , PGUI_Y )-( PGUI_DRAW_EX - 1 , PGUI_Y ),PSET,7,,&HAAAA
  1488. 14880  NEXT
  1489. 14890  RETURN
  1490. 14900 '
  1491. 14910 ' *PGUI_DRAW_T_OS
  1492. 14920 '
  1493. 14930 ' Towns-OS デザインのウィンドウ枠を表示します。
  1494. 14940 '  PGUI_DRAW_SX / SY / EX / EY
  1495. 14950 '
  1496. 14960 *PGUI_DRAW_T_OS
  1497. 14970  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7
  1498. 14980  LINE( PGUI_DRAW_EX - 2 , 1 )-( PGUI_DRAW_EX -1 , PGUI_DRAW_EY -1 ),PSET,,BF
  1499. 14990  LINE( 1 , PGUI_DRAW_EY - 2 )-( PGUI_DRAW_EX -1 , PGUI_DRAW_EY -1 ),PSET,,BF
  1500. 15000  '
  1501. 15010  PGUI_WORK_LEN = LEN( PGUI_DISP$ )
  1502. 15020  IF PGUI_WORK_LEN <> 0 THEN
  1503. 15030    PGUI_WORK_WX = 40 + PGUI_WORK_LEN * 6 + 27
  1504. 15040    LINE( 0 , 16 )-( PGUI_DRAW_EX , 16 ),PSET
  1505. 15050    LINE( 1 , 1 )-( PGUI_WORK_WX , 15 ),PSET,,BF
  1506. 15060    LINE( PGUI_WORK_WX + 1 , 1 )-( PGUI_DRAW_EX - 3 , 15 ),PRESET,,BF
  1507. 15070  ENDIF
  1508. 15080  SYMBOL( 40 , 3 ) , PGUI_DISP$ , PGUI_SYMBOL_M! , PGUI_SYMBOL_M! , 7
  1509. 15090  RETURN
  1510. 15100 '
  1511. 15110 ' *PGUI_DRAW_SQUARE2
  1512. 15120 '
  1513. 15130 '  二重枠付の長方形部品を表示します。
  1514. 15140 '  PGUI_DRAW_SX / SY / EX / EY
  1515. 15150 '
  1516. 15160 *PGUI_DRAW_SQUARE2
  1517. 15170  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7
  1518. 15180  LINE( PGUI_DRAW_SX + 2 , PGUI_DRAW_SY + 2 )-( PGUI_DRAW_EX - 2 , PGUI_DRAW_EY - 2 ),PSET,,B
  1519. 15190  LINE( PGUI_DRAW_SX + 3 , PGUI_DRAW_SY + 3 )-( PGUI_DRAW_EX - 3 , PGUI_DRAW_EY - 3 ),PSET,,B
  1520. 15200  RETURN
  1521. 15210 '
  1522. 15220 ' *PGUI_DRAW_WIN_FRAME
  1523. 15230 '
  1524. 15240 '  WINDOWS ライクなウィンドウ枠を表示します。
  1525. 15250 '  PGUI_DRAW_SX / SY / EX / EY
  1526. 15260 '
  1527. 15270 *PGUI_DRAW_WIN_FRAME
  1528. 15280  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY )-( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7
  1529. 15290  LINE( PGUI_DRAW_SX+1,PGUI_DRAW_SY+1)-( PGUI_DRAW_EX-1,PGUI_DRAW_EY-1),PSET,,B
  1530. 15300  '
  1531. 15310  LINE( PGUI_DRAW_SX+2 , PGUI_DRAW_SY+2 )-( PGUI_DRAW_EX-2 , PGUI_DRAW_SY+17 ),PRESET,,BF
  1532. 15320  LINE( PGUI_DRAW_SX+2 , PGUI_DRAW_SY+18 )-( PGUI_DRAW_EX-2 , PGUI_DRAW_SY+18 ),PSET,,B
  1533. 15330  '
  1534. 15340  SYMBOL( PGUI_DRAW_SX + 150 , PGUI_DRAW_SY + 4 ),PGUI_DISP$ , PGUI_SYMBOL_M! , PGUI_SYMBOL_M!
  1535. 15350  RETURN
  1536. 15360 '
  1537. 15370 ' *PGUI_DRAW_ROUND
  1538. 15380 '
  1539. 15390 ' 角の丸い部品を表示します。
  1540. 15400 '  PGUI_DRAW_SX / SY / EX / EY / R
  1541. 15410 '
  1542. 15420 *PGUI_DRAW_ROUND
  1543. 15430  PGUI_WORK_CSX = PGUI_DRAW_SX + PGUI_DRAW_R
  1544. 15440  PGUI_WORK_CSY = PGUI_DRAW_SY + PGUI_DRAW_R
  1545. 15450  PGUI_WORK_CEX = PGUI_DRAW_EX - PGUI_DRAW_R
  1546. 15460  PGUI_WORK_CEY = PGUI_DRAW_EY - PGUI_DRAW_R
  1547. 15470  CIRCLE( PGUI_WORK_CSX , PGUI_WORK_CSY ),PGUI_DRAW_R,,,.5!,.75!,F,PSET,7
  1548. 15480  CIRCLE( PGUI_WORK_CEX , PGUI_WORK_CSY ),PGUI_DRAW_R,,,.75!,1,F,PSET,7
  1549. 15490  CIRCLE( PGUI_WORK_CSX , PGUI_WORK_CEY ),PGUI_DRAW_R,,,.25!,.5!,F,PSET,7
  1550. 15500  CIRCLE( PGUI_WORK_CEX , PGUI_WORK_CEY ),PGUI_DRAW_R,,,0,.25!,F,PSET,7
  1551. 15510  '
  1552. 15520  LINE( PGUI_WORK_CSX , PGUI_DRAW_SY + 1 )-( PGUI_WORK_CEX  , PGUI_WORK_CSY ),PSET,7,BF
  1553. 15530  LINE( PGUI_DRAW_SX + 1 , PGUI_WORK_CSY )-( PGUI_DRAW_EX - 1 , PGUI_WORK_CEY ),PSET,7,BF
  1554. 15540  LINE( PGUI_WORK_CSX , PGUI_WORK_CEY )-( PGUI_WORK_CEX , PGUI_DRAW_EY - 1 ),PSET,7,BF
  1555. 15550  '
  1556. 15560  LINE( PGUI_WORK_CSX , PGUI_DRAW_SY )-( PGUI_WORK_CEX , PGUI_DRAW_SY ),PSET
  1557. 15570  LINE( PGUI_WORK_CSX , PGUI_DRAW_EY )-( PGUI_WORK_CEX , PGUI_DRAW_EY ),PSET
  1558. 15580  LINE( PGUI_DRAW_SX , PGUI_WORK_CSY )-( PGUI_DRAW_SX , PGUI_WORK_CEY ),PSET
  1559. 15590  LINE( PGUI_DRAW_EX , PGUI_WORK_CSY )-( PGUI_DRAW_EX , PGUI_WORK_CEY ),PSET
  1560. 15600  RETURN
  1561. 15610 '
  1562. 15620 ' *PGUI_DRAW_RECTANGLE_FILL
  1563. 15630 ' 枠付きの矩形部品を表示します。
  1564. 15640 '  PGUI_DRAW_SX / SY / EX / EY
  1565. 15650 '
  1566. 15660 *PGUI_DRAW_RECTANGLE_FILL
  1567. 15670  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY ) - ( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,BF,7
  1568. 15680  RETURN
  1569. 15690 '
  1570. 15700 *PGUI_DRAW_RECTANGLE
  1571. 15710  LINE( PGUI_DRAW_SX , PGUI_DRAW_SY ) - ( PGUI_DRAW_EX , PGUI_DRAW_EY ),PSET,,B
  1572. 15720  RETURN
  1573. 15730 '
  1574. 15740 ' *PGUI_DRAW_3D
  1575. 15750 '  盛り上がったボタンを書きます。
  1576. 15760 '  PGUI_DRAW_SX / SY / EX / EY / HEIGHT
  1577. 15770 '
  1578. 15780 *PGUI_DRAW_3D
  1579. 15790  FOR PGUI_WORK = 0 TO PGUI_DRAW_HEIGHT - 1
  1580. 15800    CONNECT(PGUI_DRAW_SX + PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX + PGUI_WORK,PGUI_DRAW_SY + PGUI_WORK)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY + PGUI_WORK),7
  1581. 15810    CONNECT(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY+PGUI_WORK+1)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX+PGUI_WORK+1,PGUI_DRAW_EY-PGUI_WORK),,PSET
  1582. 15820  NEXT
  1583. 15830  LINE( PGUI_DRAW_SX + PGUI_DRAW_HEIGHT , PGUI_DRAW_SY + PGUI_DRAW_HEIGHT )-(PGUI_DRAW_EX - PGUI_DRAW_HEIGHT , PGUI_DRAW_EY - PGUI_DRAW_HEIGHT ),PRESET,,BF
  1584. 15840  RETURN
  1585. 15850 '
  1586. 15860 ' *PGUI_DRAW_SIMPLE_3D
  1587. 15870 ' シンプルな盛り上がったボタンを書きます。
  1588. 15880 '  PGUI_DRAW_SX / SY / EX / EY / HEIGHT
  1589. 15890 '
  1590. 15900 *PGUI_DRAW_SIMPLE_3D
  1591. 15910  LINE(PGUI_DRAW_SX,PGUI_DRAW_SY)-(PGUI_DRAW_EX,PGUI_DRAW_EY),PSET,,BF,7
  1592. 15920  FOR PGUI_WORK = 1 TO PGUI_DRAW_HEIGHT
  1593. 15930    CONNECT(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_SY+PGUI_WORK+1)-(PGUI_DRAW_EX-PGUI_WORK,PGUI_DRAW_EY-PGUI_WORK)-(PGUI_DRAW_SX+PGUI_WORK+1,PGUI_DRAW_EY-PGUI_WORK),,PSET
  1594. 15940  NEXT
  1595. 15950  RETURN
  1596. 15960 '
  1597. 15970 ' *PGUI_DRAW_ICON24
  1598. 15980 '  アイコンを表示します。
  1599. 15990 '  PGUI_DRAW_SX / SY / WX / WY
  1600. 16000 '
  1601. 16010 *PGUI_DRAW_ICON24
  1602. 16020  PUT@A( MAP( PGUI_DRAW_SX , 0 ) , MAP( PGUI_DRAW_SY , 1 ))-( MAP( PGUI_DRAW_SX + PGUI_DRAW_WX - 1 , 0 ) , MAP( PGUI_DRAW_SY + PGUI_DRAW_WY - 1 , 1 )),PGUI_ICON_BUF%,MATTE,,,7,PGUI_ICON24_OFFSET& + PGUI_DATA& * PGUI_ICON24_BUF_SIZE&
  1603. 16030  RETURN
  1604. 16040 '
  1605. 16050 *PGUI_DRAW_ICON12
  1606. 16060  PUT@A( MAP( PGUI_DRAW_SX , 0 ) , MAP( PGUI_DRAW_SY , 1 ))-( MAP( PGUI_DRAW_SX + PGUI_DRAW_WX - 1 , 0 ) , MAP( PGUI_DRAW_SY + PGUI_DRAW_WY - 1 , 1 )),PGUI_ICON_BUF%,MATTE,,,7,PGUI_ICON12_OFFSET& + PGUI_DATA& * PGUI_ICON12_BUF_SIZE&
  1607. 16070  RETURN
  1608. 16080 '
  1609. 16090 ' *PGUI_READ_TEXT
  1610. 16100 '
  1611. 16110 ' テキストファイルをリストデータ領域に読み込みます。
  1612. 16120 '
  1613. 16130 '  PGUI_LIST_OFFSET&     リストデータの先頭オフセット
  1614. 16140 '  PGUI_LIST_BUF_SIZE&   利用する領域のサイズ
  1615. 16150 '  PGUI_FILE_NAME$       読み込むテキストファイル名
  1616. 16160 ' <RETURN>
  1617. 16170 '  PGUI_MAX_Y            テキストデータの総行数
  1618. 16180 '
  1619. 16190 *PGUI_READ_TEXT
  1620. 16200  OPEN "I", 16 , PGUI_FILE_NAME$
  1621. 16210  PGUI_MAX_Y = 0
  1622. 16220  WHILE EOF(16) = 0
  1623. 16230    IF PGUI_MAX_Y < PGUI_LIST_BUF_SIZE& THEN
  1624. 16240      LINE INPUT# 16 , PGUI_LIST$( PGUI_LIST_OFFSET& + PGUI_MAX_Y )
  1625. 16250    ENDIF
  1626. 16260    PGUI_MAX_Y = PGUI_MAX_Y + 1
  1627. 16270  WEND
  1628. 16280  CLOSE 16
  1629. 16290  RETURN
  1630. 16300 '
  1631. 16310 ' *PGUI_LIST_SCROLL
  1632. 16320 '
  1633. 16330 '  リストメニューをスクロールします。
  1634. 16340 '
  1635. 16350 '  PGUI_PARTS_OFFSET&
  1636. 16360 '  PGUI_LIST_OFFSET& / LIST_BUF_SIZE& / START_Y / MIN_Y / MAX_Y / SX / SY / DISP_WY / WX
  1637. 16370 '
  1638. 16380 '  PGUI_DIRECTION_Y = +1 | -1
  1639. 16390 '
  1640. 16400 *PGUI_LIST_SCROLL
  1641. 16410 '
  1642. 16420  PGUI_WORK_SX = PGUI_SX + PGUI_DISP_SX : PGUI_WORK_SY = PGUI_SY + PGUI_DISP_SY
  1643. 16430  PGUI_WORK_EX = PGUI_SX + PGUI_WX - 2  : PGUI_WORK_EY = PGUI_SY + PGUI_WY - 1 - PGUI_DISP_SY
  1644. 16440  PGUI_WORK_LWY = PGUI_FONT_WY + PGUI_LINE_SPACE
  1645. 16450  PGUI_WORK_SY_PL1 = PGUI_WORK_SY + PGUI_WORK_LWY
  1646. 16460  PGUI_WORK_CWY = PGUI_WORK_EY - PGUI_WORK_SY - 1 - PGUI_WORK_LWY
  1647. 16470  IF PGUI_DIRECTION_Y = 1 THEN
  1648. 16480    PGUI_WORK_GY = PGUI_WORK_SY_PL1 : PGUI_WORK_ESY = PGUI_WORK_EY - PGUI_WORK_LWY + 1
  1649. 16490    PGUI_WORK_PY = PGUI_WORK_SY
  1650. 16500    PGUI_WORK_OFFD = PGUI_DISP_WY - 1 : PGUI_START_Y = PGUI_START_Y + 1
  1651. 16510  ELSE
  1652. 16520    PGUI_WORK_GY = PGUI_WORK_SY : PGUI_WORK_ESY = PGUI_WORK_SY
  1653. 16530    PGUI_WORK_PY = PGUI_WORK_SY_PL1
  1654. 16540    PGUI_WORK_OFFD = 0 : PGUI_START_Y = PGUI_START_Y - 1
  1655. 16550  ENDIF
  1656. 16560  GET@A(PGUI_WORK_SX,PGUI_WORK_GY)-(PGUI_WORK_EX,PGUI_WORK_GY+PGUI_WORK_CWY),PGUI_LIST_SCROLL%
  1657. 16570  PUT@A(PGUI_WORK_SX,PGUI_WORK_PY)-(PGUI_WORK_EX,PGUI_WORK_PY+PGUI_WORK_CWY),PGUI_LIST_SCROLL%
  1658. 16580  LINE( PGUI_WORK_SX,PGUI_WORK_ESY)-(PGUI_WORK_EX,PGUI_WORK_ESY+PGUI_WORK_LWY-1),PSET,7,BF
  1659. 16590  SYMBOL( PGUI_WORK_SX , PGUI_WORK_ESY + INT( PGUI_LINE_SPACE / 2 )),PGUI_LIST$( PGUI_LIST_OFFSET& + PGUI_START_Y + PGUI_WORK_OFFD ),PGUI_SYMBOL_M!,PGUI_SYMBOL_M!
  1660. 16600 '
  1661. 16610  PGUI&( PGUI_PARTS_OFFSET& + PGUI_OF_START_Y ) = PGUI_START_Y
  1662. 16620  RETURN
  1663.